Android最佳实践(七)之AppCompat 23.2.0

逻辑根系
• 阅读 6282

这是一个系列,我们将其命名为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文件,例如:

Android最佳实践(七)之AppCompat 23.2.0

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

    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,谢谢。

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
浩浩 浩浩
4年前
WorkManager 在 Kotlin 中的实践
WorkManager是一个AndroidJetpack扩展库,它可以让您轻松规划那些可延后、异步但又需要可靠运行的任务。对于绝大部分后台执行任务来说,使用WorkManager是目前Android平台上的最佳实践。WorkManagerhttps://developer.android.google.cn/topic/libra
九章 九章
4年前
Android 组件化 —— 路由设计最佳实践
引子这篇文章会告诉你:什么是路由,是为了解决什么问题才产生的;业界现状是怎么样的,我们可以做什么来优化当前的问题;路由设计思路是怎么样的,该怎么设计比较好;如何用注解实现路由表;URL的参数如何依赖注入到Activity、Fragement;
Stella981 Stella981
3年前
Android C++ STL最佳实践
田海立@CSDN(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fhailitian.blog.csdn.net%2F)20201212《Android源码中的CSTL(https://www.oschina.net/action/GoToLink?urlhttp
Wesley13 Wesley13
3年前
DHCP最佳实践(二)
这是WindowsDHCP最佳实践和技巧的最终指南。如果您有任何最佳做法或技巧,请在下面的评论中发布它们。在本指南(二)中,我将分享以下DHCP最佳实践和技巧。1.从DHCP作用域中排除IP(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fbigyoung.cn)
Wesley13 Wesley13
3年前
EMR本地盘实例大规模数据集测试
阿里云最佳实践频道:【点击查看更多上云最佳实践(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fbp.aliyun.com%2F)】这里有丰富的企业上云最佳实践,从典型场景入门,提供一系列项目实践方案,降低企业上云门槛的同时满足您的需求!场景描述
Easter79 Easter79
3年前
TiDB 最佳实践系列(三)乐观锁事务
作者:ShirlyTiDB最佳实践系列是面向广大TiDB用户的系列教程,旨在深入浅出介绍TiDB的架构与原理,帮助用户在生产环境中最大限度发挥TiDB的优势。我们将分享一系列典型场景下的最佳实践路径,便于大家快速上手,迅速定位并解决问题。在前两篇的文章中,我们分别介绍了TiDB高并发写入常见热点问题及规避方法(https:/
Stella981 Stella981
3年前
Android 连接到网络
连接到网络这一节将告诉你如何实现一个连接到网络的简单的应用程序。它说明了一些最佳的实践,即使是在创建最简单的联网app时也应该遵守的。注意,要执行本节所描述的网络操作,你的应用的manifest必须包含如下的permissions:<usespermissionandroid:name"android.permissio
Stella981 Stella981
3年前
Android 组件化最佳实践 ARetrofit 原理
本文首发于vivo互联网技术微信公众号https://mp.weixin.qq.com/s/TXFt7ymgQXLJyBOJL8F6xg(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fmp.weixin.qq.com%2Fs%2FTXFt7ymgQXLJyBOJL8F6xg)
Wesley13 Wesley13
3年前
DHCP最佳实践(三)
这是WindowsDHCP最佳实践和技巧的最终指南。如果您有任何最佳做法或技巧,请在下面的评论中发布它们。在本指南(三)中,我将分享以下DHCP最佳实践和技巧。1.仅在需要时才使用IP冲突检测(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fbigyoung.cn
Stella981 Stella981
3年前
DevOps世界中的软件开发
!(https://oscimg.oschina.net/oscnet/f40e68cbfe8148deb00f040b4e917a0a.jpg)在整个软件开发过程中,开发人员通常需要花费大量时间来修复错误和漏洞,以便一切按计划进行交付。但是,通过DevOps实践,可以更轻松地管理和保护这些问题。这是由于以下事实:使用DevOps实践的软
逻辑根系
逻辑根系
Lv1
让风把你带走,从此我们既往不咎
文章
4
粉丝
0
获赞
0