Android开发Android进阶之路安卓开发博客

Android 摇一摇开发工具 Shaker

2018-06-05  本文已影响46人  lovejjfg

17年2月份,写过一篇 Android开发小工具-摇一摇显示当前页面信息
,这个是当时根据项目里面出现的情况临时凑合上线使用的。这段时间回顾过来,觉得应该把这个坑好好填一下。

还是先说使用场景,当你的页面已经很多很多,开发迭代的程序员也来来去去换了好几波。这个时候,怎么快速定位到需要修改的页面呢?

当然,你全局搜索指定变量,通过变量拿到布局或者指定就找到对应写死的页面也是可行的。但是这个如果碰到重复使用的布局或者变量时,并不能做到一步到位。

那么,摇一摇,我觉得是最简单,效率最高的实现方式。一摇,当前 Activity 以及其包含的 Fragment 都一目了然,实际使用告诉我,这个功能开发调试使用起来真的不错。

基于上篇文章,这里对之前的代码做了进一步抽取和封装,进一步扩展一些方法。

WechatIMG291.jpeg

主要就三个类,ShakerHelper Shaker ShakerCallback

一般使用方式

Application 中完成初始化,最简单的是:

ShakerHelper.init(true)

然后在BaseActivity中得到初始化Shaker,并绑定相关监听。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    shaker = ShakerHelper.instance(this);       
}

@Override
protected void onResume() {
    super.onResume();
    shaker.onResume();
}

@Override
protected void onPause() {
    super.onPause();
    shaker.onStop();
}

到这里,最基本的使用就搞定啦,接下来说说对应支持的新功能。这些新功能都是在 ShakerCallback 里实现。

/**
 * When you'd like to ignore some fragments to show in the shaker dialog, you should call this method.
 *
 * @return the ignore list of Fragment.
 */
@Nullable
List<Class> ignoreFragments();

/**
 * If you don't want to some Activities have the shaker ability,you may call this method to add them to the
 * disable list.
 *
 * @return the disable show shaker dialog Activities.
 */
@Nullable
List<Class> disableActivities();

/**
 * If you'd like to have you own shaker dialog,you should call this method to add you layout resource id.
 *
 * @return the specified layout resource.
 */
@LayoutRes
int initHintViewLayout();

/**
 * When your specified view is inflated to the dialog,this method will callback. so that you can dell with the
 * views.
 *
 * @param dialog the shaker dialog
 * @param view the view inflated by method {@link #initHintViewLayout()}
 */

void onHintViewInflated(DialogInterface dialog, View view);

/**
 * When the Sensor result is changed,this method will callback.
 *
 * @param event the Sensor event
 * @return return true if you want to show the shaker dialog, otherwise not.
 */
boolean onSenseChanged(SensorEvent event);

/**
 * If you'd like to handle the shaker dialog content by yourself, you may need to add your
 * {@link FragmentsHandler} and call this method to add to {@link ShakerHelper}
 *
 * @return yourself list of {@link FragmentsHandler}
 */

List<FragmentsHandler> fragmentHandlers();

/**
 * When shaker dialog is dismiss,this method will callback,so that you can do something when the dialog is dismiss.
 *
 * @param context current Activity
 * @param dialog current dialog
 */
void onDismiss(@NonNull Activity context, DialogInterface dialog);

每个方法都带有相关的解释,当然,让你把每个方法都实现一次也挺尴尬,所以这里有一个 DefaultShakerCallback ,默认全部方法都是空实现,然后只需要关心自己需要的方法就好。下面挑重点说下。

自定义UI

之前这一块并没有扩展出来,就是摇一摇功能太单一,比如我们在开发调试模式时还需要类似切换环境等功能,需要一个按钮时,就可以根据自己指定 UI 实现相关信息显示和对应环境切换。这里提供 initHintViewLayout()onHintViewInflated() 两个方法,第一个是告诉ShakerHelper 你要使用指定的布局展示相关内容。 第二个方法是在View填充好之后返回给你,方便设置相关事件。

自定义过滤条件

之前写死过滤掉 Glide 自带的 Fragment,然后如果你自己也有一些「骚操作」也用到 Fragment ,并且不想让它显示在 Dialog 里,那么你可以指定这个过滤条件。ignoreFragments() 就是用来指定相关需要过滤的 Fragment

另外还有一些 Activity ,可能你并不希望它有摇一摇功能,但是,我们初始化当然是放在 BaseActivity 里,这时候你可以过滤一些 ActivitydisableActivities() 同理就是用来过滤这些 Activity

摇一摇触发条件

Shaker 中默认是去判断 X 轴加速度相关的变化,如果你想通过 Y 轴或者 Z 轴或者自己的组合逻辑来触发弹窗展示,这里也给你提供相关方法,方便你实现相关功能。onSenseChanged() 将相关 SensorEvent 事件传递给你,你可以自己觉得是否触发弹窗。

自定义展示格式和展示逻辑

如果我写这一套你觉得不太好,比如你不喜欢 > 这符号,没关系,这里你可以自定义 FragmentsHandler 的实现类,自己实现相关功能。FragmentsHandler 其实就两个方法,canHandleFragment()handleFragment() ,当 canHandleFragment() 返回 true 之后,handleFragment()才能被执行。

说到这里,新功能说的差不多了,目前我已经写好 SupportFragmentFragmentsHandler ,但是对于 Fragment ,这个对应的 FragmentsHandler 还没有实现,因为里面有使用到 FragmentManagergetFragments() 方法,但是在 Fragment 中,这个方法要 O 才开始支持。所以,目前只支持support 包 Fragment,当然,你可以自己完成相关 FragmentsHandler 实现相关拓展。

GitHub 已经准备就绪 ~Shaker~

第一篇: Android开发小工具-摇一摇显示当前页面信息

PS : 昨天 微软已经正式把 GitHub 给收购~~~

---- Edit By Joe At 2018 06 05 ----

上一篇下一篇

猜你喜欢

热点阅读