Android最佳实践(七)之AppCompat 23.2.0
来自: https://segmentfault.com/a/1190000004519874
这是一个系列,我们将其命名为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>