Markdown版本筆記 | 個人GitHub首頁 | 個人博客 | 個人微信 | 個人郵箱 |
---|---|---|---|---|
MyAndroidBlogs | baiqiantao | baiqiantao | bqt20094 | baiqiantao@sina.com |
SwissArmyKnife
autopilot 分支
效果視頻android
SwissArmyKnife 是一款方便調試android UI的工具。能夠直接在android設備屏幕上顯示控件的相關信息git
compile 'com.wanjian:sak:2.0.2'
no opt 包github
compile 'com.wanjian:sak-nop:0.0.3'
//開啓 SAK.init(Application application, Config config) //關閉 SAK.unInstall();
啓動app後會在屏幕右側看到一個 藍色靶心
,雙擊
便可進入功能界面。shell
Tips:
當開啓新窗口時(包括新的Activity、彈出dialog、pop),須要手動點擊一次屏幕右側的 靶心 按鈕,以此激活當前窗口
,否則當前窗口不會啓用 SwissArmyKnife!微信
自動初始化版本app
Autopilot 版基於com.wanjian:sak:xx.xx.xx
,實現了自動初始化,只須要在gradle中引入依賴便可,不須要編寫額外的初始化代碼ide
接入方式工具
compile 'com.wanjian:sak-autopilot:2.0.1'
no opt 包佈局
compile 'com.wanjian:sak-nop:0.0.3'
開啓及關閉
在控制檯執行 adb shell am broadcast -a com.sak
命令便可開啓及關閉
Tips:
編輯控件、相對距離、移動控件,這幾個功能相互衝突,請勿同時開啓
經常使用的功能
長按
兩個控件便可顯示兩個控件間的水平和豎直距離
屏幕下方
會顯示圓環中心的顏色值(圓環的顏色也會改變)其餘支持的功能
長按
須要編輯的控件便可彈出編輯窗口,能夠修改內外邊距大小、寬高、背景色、字體顏色大小等長按
控件便可拖動可配置項
層級區間
過濾掉部分view,避免數值相互覆蓋能夠滾動的控件滾動後致使的信息覆蓋
問題。實現過程:
RootContainerView
,RootContainerView
內部包含了藍色的靶心view。每一個window都有一個專用的RootContainerView
。DashBoardView
,DashBoardView
是其餘各功能view的容器,好比開啓取色功能後會把TakeColorView
加到DashBoardView
中。DashBoardView
添加到了當前窗口的RootContainerView
中。AbsLayer
的子類,AbsLayer
繼承自FrameLayout
。噹噹前窗口的任何一個view須要繪製時都會調用AbsLayer
的onUiUpdate
方法,能夠在該方法裏繪製相關信息,好比邊框,字體顏色等。能夠經過 Config 對 SAK 進行配置或自定義功能。
public class App extends Application { @Override public void onCreate() { super.onCreate(); Config config = new Config.Build(this) .viewFilter(getViewFilter()) .addLayerView(getLayerView()) .addSizeConverter(getSizeConverter()) .build(); SAK.init(this, config); } private ISizeConverter getSizeConverter() { return new ISizeConverter() { // 能夠添加自定義的SizeConverter,默認提供了Origin*、Px2Dp*,Px2Sp* @Override public String desc() { return "my converter"; } @Override public Size convert(Context context, float length) { return Size.obtain().setLength(length / 2).setUnit("myU"); } @Override public int recovery(Context context, float length) { return 0; } }; } private AbsLayer getLayerView() { // 能夠添加自定義的view,自定義的view要繼承自AbsLayer或其子類,AbsLayer是FrameLayout的子類 // 當激活SwissArmyKnife時會調用 onAttached(View rootView)方法,rootView是當前window的根view,好比Activity的根view DecorView。 //當停用是會調用`onDetached` return new AbsLayer(this) { @Override public String description() { return null; } @Override public Drawable icon() { return null; } }; } private ViewFilter getViewFilter() { return new ViewFilter() { @Override public boolean apply(View view) { // 這裏能夠決定要顯示哪一種view,好比只顯示ImageView子類和LinearLayout子類 // 若想要顯示全部可見的view,直接返回 view.getVisibility()==View.VISIBLE 便可 return view instanceof ImageView || view instanceof LinearLayout; } }; } }
2019-6-30