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