Android最佳实践(七)之AppCompat 23.2.0

ufosaga 8年前

来自: https://segmentfault.com/a/1190000004519874

这是一个系列,我们将其命名为android最佳实践,如果你还没有看之前的文章:

Android最佳实践(一)

android最佳实践(二)

android最佳实践(三)

android最佳实践(四)

android最佳实践(五)

Android最佳实践(六)之扫描二维码模块

在2016年的2月24日,google的Android开发团队发布了:

compile 'com.android.support:appcompat-v7:23.2.0'

那么其和我们现阶段用的23.1有什么区别呢,在这篇博客中,将会讲解appcompat23.2的新特性以及编写相关实验代码,供大家一起学习。

那么,就从我最喜欢的AppCompat DayNight theme和 Bottom Sheets讲起吧

AppCompat DayNight theme

其提供了日夜模式,其对应有四种状态:

public static final int MODE_NIGHT_NO = 1;    public static final int MODE_NIGHT_YES = 2;    public static final int MODE_NIGHT_AUTO = 0;    public static final int MODE_NIGHT_FOLLOW_SYSTEM = -1;

其分别对应的是:不使用夜间模式,使用夜间模式,根据地理位置推算白天夜晚自动进入夜间或白天模式,根据Android系统设置的模式。

首先你需要在你的gradle文件中加入该版本的依赖包,然后修改主题为Theme.AppCompat.DayNight,同样的你可以添加以night为后缀的value文件,例如:

定义完主题后,你可以在整个应用程序中设置默认值,比如:

    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);

或者你可以通过setLocalNightMode方法,动态的设定主题。例如:

   mButtonDay.setOnClickListener(new View.OnClickListener() {              @Override              public void onClick(View v) {                  getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO);                  recreate();              }          });     mButtonNight.setOnClickListener(new View.OnClickListener() {              @Override              public void onClick(View v) {                  getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);                  recreate();              }          });

是不是很简单!你也可以查看源码 https://github.com/neuyu/android-support-new-features

Bottom Sheets

相信大部分同事都有过模仿ios的bottomsheet吧,现在Android的material design来了。

现在你仅仅需要将design包加入到你的项目:

compile 'com.android.support:design:23.2.0'

然后:

BottomSheetDialog dialog = new BottomSheetDialog(context);    View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_list, null);    RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.bottom_sheet_recycler_view);  recyclerView.setLayoutManager(new LinearLayoutManager(context));  recyclerView.setAdapter(new SimpleAdapter());  dialog.setContentView(view);  dialog.show();

其用法类似DialogFragment,需要自定义布局,具体的如何为其为其添加点击事件等。通过附加一个BottomSheetBehavior到子视图的CoordinatorLayout(添加app:layout_behavior =“android.support.design.widget.BottomSheetBehavior”),通过对BottomSheet的操作我们可以得到它的五种状态。

STATE_COLLAPSED:关闭Bottom Sheets,高度可控属性app:behavior_peekHeight(默认为0)

STATE_DRAGGING:在用户直接拖动Bottom Sheets向上或向下的中间状态

STATE_SETTLING:当Bottom Sheets被释放和沉降到其最终位置记录的状态

STATE_EXPANDED:Bottom Sheets展开时的状态

STATE_HIDDEN:默认情况下禁用(和启用应用程序:behavior_hideable属性),这使得用户可以向下滑动Bottom Sheets完全隐藏底部。

支持矢量图片和矢量图片动画

关于矢量图和动画以及bottom sheets的事件监听会在github中以代码的形式给出,欢迎大家fork和star,谢谢。

</div>