-UI调试工具 SAK 布局 MD
生活随笔
收集整理的這篇文章主要介紹了
-UI调试工具 SAK 布局 MD
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
- 目錄
- SwissArmyKnife
- 接入方式
- 自動初始化版本
- 支持的功能
- 可配置項
- 原理
- 自定義功能
| MyAndroidBlogs | baiqiantao | baiqiantao | bqt20094 | baiqiantao@sina.com |
目錄
SwissArmyKnife
SwissArmyKnife
autopilot 分支
效果視頻
SwissArmyKnife 是一款方便調試android UI的工具??梢灾苯釉赼ndroid設備屏幕上顯示控件的相關信息
接入方式
compile 'com.wanjian:sak:2.0.2'no opt 包
compile 'com.wanjian:sak-nop:0.0.3' //開啟 SAK.init(Application application, Config config)//關閉 SAK.unInstall();啟動app后會在屏幕右側看到一個 藍色靶心 ,雙擊即可進入功能界面。
Tips:
當開啟新窗口時(包括新的Activity、彈出dialog、pop),需要手動點擊一次屏幕右側的 靶心 按鈕,以此激活當前窗口,不然當前窗口不會啟用 SwissArmyKnife!
自動初始化版本
自動初始化版本
Autopilot 版基于com.wanjian:sak:xx.xx.xx,實現(xiàn)了自動初始化,只需要在gradle中引入依賴即可,不需要編寫額外的初始化代碼
接入方式
compile 'com.wanjian:sak-autopilot:2.0.1'no opt 包
compile 'com.wanjian:sak-nop:0.0.3'開啟及關閉
在控制臺執(zhí)行?adb shell am broadcast -a com.sak命令即可開啟及關閉
支持的功能
Tips:
編輯控件、相對距離、移動控件,這幾個功能相互沖突,請勿同時開啟
常用的功能
- Activity、Fragment名稱:可以看到當前Activity的類名,每一個Fragment的類名。
- 相對距離:依次長按兩個控件即可顯示兩個控件間的水平和豎直距離
- 拾取控件:拖動圓環(huán)到要拾取的控件位置,可以獲取控件id、類型、位置、背景色、寬高、邊距、字體大小顏色等信息
- 取色器:會在屏幕顯示綠色圓環(huán),可以任意拖動,屏幕下方會顯示圓環(huán)中心的顏色值(圓環(huán)的顏色也會改變)
- 水平直尺、豎直直尺:會在屏幕顯示水平直尺和豎直直尺,可以任意拖動進行測量,直尺上有px和dp兩個值
- 邊框:顯示所有View的邊界(類似開發(fā)者選項中的"顯示布局邊界"功能)
其他支持的功能
- 編輯控件:長按需要編輯的控件即可彈出編輯窗口,可以修改內外邊距大小、寬高、背景色、字體顏色大小等
- 移動控件:長按控件即可拖動
- Scalpel:解剖刀,會立體顯示view,可以直觀的查看view的層級關系,拖動屏幕左側的按鈕可以切換角度
- 網(wǎng)格:顯示網(wǎng)格
- 字體大小:顯示所有TextView的大小
- 字體顏色:顯示所有TextView的顏色
- 外邊距:顯示所有View的外邊距(Margin)的大小(會填充一個背景色)
- 內邊距:顯示所有View的內邊距(Padding)的大小(會填充一個背景色)
- 寬高:顯示所有View的寬高
- 圖片寬高:顯示所有ImageView的寬高
- 背景色:顯示所有設置background的控件的背景色的值
- 自定義信息:
- View類型:顯示所有View的類型
- 布局樹:顯示布局樹
- 性能:可以看到當前窗口view的繪制耗時、事件分發(fā)耗時、measure耗時、layout耗時、handler耗時等信息
- 開啟后會自動禁用硬件加速,實際繪制時間可能要少一些
- ListView會在事件分發(fā)時調用getView,所以ListView事件分發(fā)時間稍微長一些
- RecyclerView會在view繪制時bindView,所以RecyclerView繪制時間會稍長一些
可配置項
可配置項
- 層級區(qū)間:Fragment名稱、外邊距、內邊距、寬高、字體大小、字體顏色、背景色等功能下,可以通過設置層級區(qū)間過濾掉部分view,避免數(shù)值相互覆蓋
- 單位:距離默認單位是dp,可以切換為dp、sp、px單位
- 裁剪繪制范圍:若內外邊距、寬高、字體顏色等信息不顯示,可以關閉 裁剪繪制。開啟該功能可以避免可以滾動的控件滾動后導致的信息覆蓋問題。
原理
實現(xiàn)過程:
- 監(jiān)聽window的創(chuàng)建,從而拿到每一個window的根view。
- 拿到根view(必須是FrameLayout或RelativeLayout)后給根view添加RootContainerView,RootContainerView內部包含了藍色的靶心view。每個window都有一個專用的RootContainerView。
- 創(chuàng)建各window共用的DashBoardView,DashBoardView是其他各功能view的容器,比如開啟取色功能后會把TakeColorView加到DashBoardView中。
- 雙擊當前窗口的靶心按鈕會在當前窗口激活 SwissArmyKnife,其實是把共用的DashBoardView添加到了當前窗口的RootContainerView中。
- 每一個功能都是AbsLayer的子類,AbsLayer繼承自FrameLayout。當當前窗口的任何一個view需要繪制時都會調用AbsLayer的onUiUpdate方法,可以在該方法里繪制相關信息,比如邊框,字體顏色等。
自定義功能
可以通過 Config 對 SAK 進行配置或自定義功能。
public class App extends Application {@Overridepublic 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*@Overridepublic String desc() {return "my converter";}@Overridepublic Size convert(Context context, float length) {return Size.obtain().setLength(length / 2).setUnit("myU");}@Overridepublic 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) {@Overridepublic String description() {return null;}@Overridepublic Drawable icon() {return null;}};}private ViewFilter getViewFilter() {return new ViewFilter() {@Overridepublic boolean apply(View view) {// 這里可以決定要顯示哪種view,比如只顯示ImageView子類和LinearLayout子類// 若想要顯示所有可見的view,直接返回 view.getVisibility()==View.VISIBLE 即可return view instanceof ImageView || view instanceof LinearLayout;}};} }2019-6-30
轉載于:https://www.cnblogs.com/baiqiantao/p/11108512.html
總結
以上是生活随笔為你收集整理的-UI调试工具 SAK 布局 MD的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VISTA下载全集(下)
- 下一篇: 经典冒泡排序法