Android 免 root 兼容所有版本 ui 調(diào)試工具
https://github.com/android-notes/SwissArmyKnife
SwissArmyKnife
android免root兼容所有版本ui調(diào)試工具
SwissArmyKnife是什么
SwissArmyKnife 是一款方便調(diào)試android UI的工具,可以兼容所有android版本,不需要root權(quán)限??梢灾苯釉赼ndroid手機(jī)屏幕上顯示當(dāng)前Activity中所有控件(不管是否隱藏)的邊界,內(nèi)外邊距大小,每一個(gè)控件大小,圖片大小,字體顏色,大小,以及自定義信息。同時(shí)可以直接在屏幕上取色,另外還提供了直尺(單位為px和dp),圓角尺(單位dp)工具,可以直接測(cè)量大小。針對(duì)android開發(fā)者還提供了布局樹查看功能,可以直接在手機(jī)屏幕查看當(dāng)前Activity中所有控件層次信息等。
可以通過(guò)滾動(dòng)層級(jí)滾輪來(lái)控制只顯示某一層級(jí)的信息,避免層級(jí)覆蓋等。
使用方式
compile 'com.wanjian:sak:0.0.2'
android 4.0及以上用戶直接在application的onCreate中調(diào)用 com.wanjian.sak.LayoutManager.init(Application context) ,其他版本可以在activity的onResume中調(diào)用com.wanjian.sak.LayoutManager.init(Activity act)初始化。
啟動(dòng)app后會(huì)在屏幕左上角看到一個(gè) android logo ,點(diǎn)擊即可進(jìn)入功能界面。
功能界面
![]()
![]()
邊框選項(xiàng)
開啟邊框選項(xiàng)后可以在手機(jī)屏幕看到所有控件的邊界,效果如下
![]()
內(nèi)外邊距選項(xiàng)
開啟后會(huì)在屏幕看到如下效果
![]()
半透明綠色代表內(nèi)邊距,PT表示上邊內(nèi)邊距(padding top),PL表示左內(nèi)邊距(padding left),PT表示右內(nèi)邊距(padding right),PB便是下內(nèi)邊距(padding bottom)。
半透明紅色代表外邊距, ML,MT,MR,MB分別表示左外邊距,上外邊距,右外邊距,下外邊距。
所有邊距單位都是dp(pt),android中會(huì)四舍五入,所有邊距都是整數(shù),所以可能跟設(shè)計(jì)圖中有不超過(guò)1dp(pt)的誤差。
寬高選項(xiàng)
開啟后會(huì)看到控件的寬高,單位是dp(pt)
![]()
圖片寬高
字體大小
![]()
字體顏色
16進(jìn)制,ARGB
![]()
強(qiáng)制圖片寬高
若開啟圖片寬高選項(xiàng)后看不到圖片大小,可以嘗試開啟強(qiáng)制圖片寬高選項(xiàng)。 ps 該選項(xiàng)可能會(huì)導(dǎo)致滑動(dòng)卡頓
自定義信息
自定義信息用于android開發(fā)者調(diào)試使用,開發(fā)者可以為view設(shè)置setTag(com.wanjian.sak.CanvasManager.INFO_KEY,Object),設(shè)置后并開啟自定義信息選項(xiàng)后就可以在控件左上角看到自定義的文本信息了。
比如開發(fā)者想要在屏幕上看到TextView中有多少個(gè)文字,就可以這樣使用textview.setTag(com.wanjian.sak.CanvasManager.INFO_KEY,textview.getText().length()),這樣開啟自定義信息選項(xiàng)后就可以在TextView上看到文字長(zhǎng)度了。
實(shí)時(shí)刷新
開啟實(shí)時(shí)刷新后當(dāng)手指在屏幕上移動(dòng)時(shí)就可以實(shí)時(shí)看到相關(guān)信息,開啟實(shí)時(shí)刷新后可能會(huì)導(dǎo)致滑動(dòng)卡頓,也可能導(dǎo)致觸摸,點(diǎn)擊等失效。
層級(jí)信息
可以通過(guò)滾動(dòng)滾輪來(lái)控制只顯示某一層次區(qū)間的信息,比如只想看ListView中子控件的大小,就可以滾動(dòng)滾輪來(lái)控制只顯示ListView子控件大小,具體調(diào)整成多少需要多次嘗試。滾輪可以控件邊框,寬高,布局樹等等。
直尺圓角尺,取色器
開啟后會(huì)在屏幕左上角顯示,取色器剛開啟時(shí)只會(huì)在屏幕左上角看到一個(gè)黑框,拖動(dòng)到要取色的位置后抬起手機(jī)即可完成取色,取色器四個(gè)角可以獲取所指像素的顏色值。取色器可以獲取native頁(yè)面每個(gè)像素顏色,也可以獲取webview中每一個(gè)像素的顏色。
![]()
布局樹
布局樹可以雙指縮放
![]()
擴(kuò)展
用戶可以方便的對(duì)SAK進(jìn)行擴(kuò)展,只需要繼承自AbsCanvas并重新onDraw(Canvas canvas, Paint paint, ViewGroup viewGroup, int startLayer, int endLayer),
或者繼承自CanvasLayerAdapter并重寫drawLayer(Canvas canvas, Paint paint, View view)
又或者繼承自CanvasLayerTxtAdapter
區(qū)別在于onDraw中沒對(duì)層級(jí)進(jìn)行處理,drawLayer中的view已經(jīng)是層級(jí)區(qū)間的view,CanvasLayerTxtAdapter提供了drawTxt(String txt, Canvas canvas, Paint paint, View view)方法,可以直接調(diào)用drawTxt就可以把txt繪制到當(dāng)前view左上角。
寫完自定義的Canvas后還需要在OperatorView布局中加入布局代碼,用于開啟自定義的Canvas,比如在布局中加入開關(guān)按鈕,并為按鈕添加監(jiān)聽,開啟后調(diào)用CanvasManager.getInstance(getContext()).addCanvas(new 你的Canvas())
比如我想自定義一個(gè)查看TextView字體大小的,我可以先實(shí)現(xiàn)一個(gè)Canvas
public class TextSizeCanvas extends CanvasLayerTxtAdapter {
@Override
protected void drawLayer(Canvas canvas, Paint paint, View view) {
if (view instanceof TextView) {
float size = ((TextView) view).getTextSize();
String txt = px2sp(view.getContext(), size) + "sp/ " + px2dp(view.getContext(), size) + "dp";
drawTxt(txt, canvas, paint, view);
}
}
}
然后在OperatorView布局中加入開關(guān),當(dāng)開啟后執(zhí)行
CanvasManager.getInstance(getContext()).addCanvas(new TextSizeCanvas());
就可以了。
