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