日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

-UI调试工具 SAK 布局 MD

發(fā)布時(shí)間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 -UI调试工具 SAK 布局 MD 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 目錄
  • SwissArmyKnife
    • 接入方式
    • 自動(dòng)初始化版本
    • 支持的功能
    • 可配置項(xiàng)
    • 原理
    • 自定義功能
Markdown版本筆記我的GitHub首頁我的博客我的微信我的郵箱
MyAndroidBlogsbaiqiantaobaiqiantaobqt20094baiqiantao@sina.com

目錄

SwissArmyKnife

SwissArmyKnife
autopilot 分支
效果視頻

SwissArmyKnife 是一款方便調(diào)試android UI的工具。可以直接在android設(shè)備屏幕上顯示控件的相關(guān)信息

接入方式

compile 'com.wanjian:sak:2.0.2'

no opt 包

compile 'com.wanjian:sak-nop:0.0.3' //開啟 SAK.init(Application application, Config config)//關(guān)閉 SAK.unInstall();

啟動(dòng)app后會(huì)在屏幕右側(cè)看到一個(gè) 藍(lán)色靶心 ,雙擊即可進(jìn)入功能界面。

Tips:
當(dāng)開啟新窗口時(shí)(包括新的Activity、彈出dialog、pop),需要手動(dòng)點(diǎn)擊一次屏幕右側(cè)的 靶心 按鈕,以此激活當(dāng)前窗口,不然當(dāng)前窗口不會(huì)啟用 SwissArmyKnife!

自動(dòng)初始化版本

自動(dòng)初始化版本

Autopilot 版基于com.wanjian:sak:xx.xx.xx,實(shí)現(xiàn)了自動(dòng)初始化,只需要在gradle中引入依賴即可,不需要編寫額外的初始化代碼

接入方式

compile 'com.wanjian:sak-autopilot:2.0.1'

no opt 包

compile 'com.wanjian:sak-nop:0.0.3'

開啟及關(guān)閉
在控制臺(tái)執(zhí)行?adb shell am broadcast -a com.sak命令即可開啟及關(guān)閉

支持的功能

Tips:
編輯控件、相對距離、移動(dòng)控件,這幾個(gè)功能相互沖突,請勿同時(shí)開啟

常用的功能

  • Activity、Fragment名稱:可以看到當(dāng)前Activity的類名,每一個(gè)Fragment的類名。
  • 相對距離:依次長按兩個(gè)控件即可顯示兩個(gè)控件間的水平和豎直距離
  • 拾取控件:拖動(dòng)圓環(huán)到要拾取的控件位置,可以獲取控件id、類型、位置、背景色、寬高、邊距、字體大小顏色等信息
  • 取色器:會(huì)在屏幕顯示綠色圓環(huán),可以任意拖動(dòng),屏幕下方會(huì)顯示圓環(huán)中心的顏色值(圓環(huán)的顏色也會(huì)改變)
  • 水平直尺、豎直直尺:會(huì)在屏幕顯示水平直尺和豎直直尺,可以任意拖動(dòng)進(jìn)行測量,直尺上有px和dp兩個(gè)值
  • 邊框:顯示所有View的邊界(類似開發(fā)者選項(xiàng)中的"顯示布局邊界"功能)

其他支持的功能

  • 編輯控件:長按需要編輯的控件即可彈出編輯窗口,可以修改內(nèi)外邊距大小、寬高、背景色、字體顏色大小等
  • 移動(dòng)控件:長按控件即可拖動(dòng)
  • Scalpel:解剖刀,會(huì)立體顯示view,可以直觀的查看view的層級關(guān)系,拖動(dòng)屏幕左側(cè)的按鈕可以切換角度
  • 網(wǎng)格:顯示網(wǎng)格
  • 字體大小:顯示所有TextView的大小
  • 字體顏色:顯示所有TextView的顏色
  • 外邊距:顯示所有View的外邊距(Margin)的大小(會(huì)填充一個(gè)背景色)
  • 內(nèi)邊距:顯示所有View的內(nèi)邊距(Padding)的大小(會(huì)填充一個(gè)背景色)
  • 寬高:顯示所有View的寬高
  • 圖片寬高:顯示所有ImageView的寬高
  • 背景色:顯示所有設(shè)置background的控件的背景色的值
  • 自定義信息
  • View類型:顯示所有View的類型
  • 布局樹:顯示布局樹
  • 性能:可以看到當(dāng)前窗口view的繪制耗時(shí)、事件分發(fā)耗時(shí)、measure耗時(shí)、layout耗時(shí)、handler耗時(shí)等信息
    • 開啟后會(huì)自動(dòng)禁用硬件加速,實(shí)際繪制時(shí)間可能要少一些
    • ListView會(huì)在事件分發(fā)時(shí)調(diào)用getView,所以ListView事件分發(fā)時(shí)間稍微長一些
    • RecyclerView會(huì)在view繪制時(shí)bindView,所以RecyclerView繪制時(shí)間會(huì)稍長一些

可配置項(xiàng)

可配置項(xiàng)

  • 層級區(qū)間:Fragment名稱、外邊距、內(nèi)邊距、寬高、字體大小、字體顏色、背景色等功能下,可以通過設(shè)置層級區(qū)間過濾掉部分view,避免數(shù)值相互覆蓋
  • 單位:距離默認(rèn)單位是dp,可以切換為dp、sp、px單位
  • 裁剪繪制范圍:若內(nèi)外邊距、寬高、字體顏色等信息不顯示,可以關(guān)閉 裁剪繪制。開啟該功能可以避免可以滾動(dòng)的控件滾動(dòng)后導(dǎo)致的信息覆蓋問題。

原理

實(shí)現(xiàn)過程:

  • 監(jiān)聽window的創(chuàng)建,從而拿到每一個(gè)window的根view。
  • 拿到根view(必須是FrameLayout或RelativeLayout)后給根view添加RootContainerView,RootContainerView內(nèi)部包含了藍(lán)色的靶心view。每個(gè)window都有一個(gè)專用的RootContainerView。
  • 創(chuàng)建各window共用的DashBoardView,DashBoardView是其他各功能view的容器,比如開啟取色功能后會(huì)把TakeColorView加到DashBoardView中。
  • 雙擊當(dāng)前窗口的靶心按鈕會(huì)在當(dāng)前窗口激活 SwissArmyKnife,其實(shí)是把共用的DashBoardView添加到了當(dāng)前窗口的RootContainerView中。
  • 每一個(gè)功能都是AbsLayer的子類,AbsLayer繼承自FrameLayout。當(dāng)當(dāng)前窗口的任何一個(gè)view需要繪制時(shí)都會(huì)調(diào)用AbsLayer的onUiUpdate方法,可以在該方法里繪制相關(guān)信息,比如邊框,字體顏色等。

自定義功能

可以通過 Config 對 SAK 進(jìn)行配置或自定義功能。

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,默認(rèn)提供了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的子類// 當(dāng)激活SwissArmyKnife時(shí)會(huì)調(diào)用 onAttached(View rootView)方法,rootView是當(dāng)前window的根view,比如Activity的根view DecorView。//當(dāng)停用是會(huì)調(diào)用`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

轉(zhuǎn)載于:https://www.cnblogs.com/baiqiantao/p/11108512.html

總結(jié)

以上是生活随笔為你收集整理的-UI调试工具 SAK 布局 MD的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。