Android Support Library 23.2介绍(翻译自官方文档)
Android Support Library 23.2
(译者注:本文标注了部分文字链接,但须要科学上网,要查看全部链接。请查看 sukey=014c68f407f2d3e181b6b5e665f26ab74e59ea4669ebf40cef596167eac03e8d7d0c27e2f0362866b93075621d2fe143">原文
作者 Ian Lake, Developer Advocate
首先你要知道Android Support Library不是单个庞大的库。而是一个系列。这一系列库提供了向后兼容的API,以及在旧版本号的安卓平台上也能使用的支持库特有的特性。
23.2版本号提供了几个支持库,并在已有的支持库中加入了一些新功能。
list=PLWz5rJ2EKKc9e0d55YHgJFHXNZbGHEXJX&v=7E2lNBM38IE">youtube介绍视频
支持 Vector Drawables 和 Animated Vector Drawables
有了Vector Drawables,原来须要在assets放入多张png图片才干完毕的绘制,如今仅仅须要在xml中定义好矢量图就可以。之前Vector Drawables仅仅支持Lollipop以上的版本号。如今有了相应的支持库:support-vector-drawable库支持VectorDrawable,support-animated-vector-drawable 支持AnimatedVectorDrawable
Android Studio 1.4对Vector Drawables做了有限的支持,即在编译阶段生成png图 要取消这一支持(同一时候真正利用Vector Drawables以及节省空间)。你须要在build.gradle文件里加上 vectorDrawables.useSupportLibrary = true :
// Gradle Plugin 2.0+
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
这个属性仅仅在2.0版本号的Gradle Plugin可用。假设你使用的是1.5版本号的Gradle,请使用以下的代码:
// Gradle Plugin 1.5
android {
defaultConfig {
generatedDensities = []
}
// This is handled for you by the 2.0+ Gradle Plugin
aaptOptions {
additionalParameters "--no-version-vectors"
}
}
你能够在API 7以上使用VectorDrawableCompat,在API 11 以上使用AnimatedVectorDrawableCompat。因为载入drawables的机制不同,不是每一个使用drawable id的地方(比方xml文件里)都支持vector drawables。但不用操心,AppCompat 已经加入了非常多功能以方便你使用vector drawables
首先。当结合AppCompat使用ImageView(或者其子类,比方ImageButton和FloatingActionButton)时你能够使用属性app:srcCompat来引用vector drawables资源(这个属性也能够引用其它android:src支持的drawable 资源)
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_add" />
假设你须要执行时改变图片资源。仅仅须要跟曾经一样使用 utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#setImageResource%28int%29">setImageResource()
要在Lollipop之前的版本号直接使用vector drawables。仅仅能通过app:srcCompat。
可是AppCompat还支持从drawable 容器(比方StateListDrawable, InsetDrawable, LayerDrawable, LevelListDrawable, 和 RotateDrawable)中载入vector drawables。
利用这一点,你能够在 TextView的android:drawableLeft等情况下使用矢量图。(译者注,比方
<TextView
android:drawableLeft="@drawable/state_list_icon" />
//drawable容器地址 res/drawable/state_list_icon.xml
<selector xmlns:android="...">
<item android:state_checked="true"
android:drawable="@drawable/checked_icon" />
<item android:drawable="@drawable/icon" />
</selector>
//矢量图地址 res/drawable/checked_icon.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="32dp"
android:viewportWidth="32"
android:height="32dp"
android:viewportHeight="32">
...
</vector>
)
AppCompat DayNight 主题
除了对矢量图的支持这一重大功能。这个版本号的AppCompat还添加了新的主题:Theme.AppCompat.DayNight.
在API 14 曾经。DayNight主题及其子主题 DayNight.NoActionBar, DayNight.DarkActionBar, DayNight.Dialog等是Light的效果。但在API 14及更高版本号,DayNight主题能让APP依据是否是夜晚(night)在Light主题和Dark主题间自如切换
默认是依据系统值(由UiModeManager.getNightMode()得出)来确定是否是夜晚,但你也利用AppCompatDelegate里的方法覆写这个值。
通过 static AppCompatDelegate.setDefaultNightMode() 方法,你能够设置APP级别的默认值(直到进程重新启动)。也能够通过getDelegate() 方法获得一个AppCompatDelegate。然后使用setLocalNightMode来单独设置当前Activity或Dialog的主题。
AppCompatDelegate.MODE_NIGHT_AUTO这以属性将依据时间和近期一次记录的地理位置(假设你的app有地理位置权限(location permissions))来自己主动切换白天和夜晚的主题,而 MODE_NIGHT_NO 意味着禁止使用夜晚的主题,MODE_NIGHT_YES意味着总是使用夜晚的主题。
非常重要的一点,当应用DayNight 主题时。你须要全面的測试你的app,因为硬编码的颜色非常easy让文字和图标难以辨认。当你在主题的文字和颜色设置项中使用的是 标准的 TextAppearance.AppCompat 样式,你会发现这个问题已经帮你处理好了。
还有一方面。假设你想要为夜晚的模式自己定义不论什么资源。AppCompat将重用 utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#NightQualifier">夜晚模式资源限定名目录
请考虑使用标准色或者AppCompat中的tinting功能来简化这个模式的使用。
设计支持库: Bottom Sheets
utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">设计支持库 utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">bottom sheets
仅仅要在CoordinatorLayout的子View上加入BottomSheetBehavior(比方加上app:layout_behavior=”android.support.design.widget.BottomSheetBehavior”)。你就能够适当的监听用户的触屏事件。触屏事件有以下5种状态:
- STATE_COLLAPSED: 默认的折叠状态。 bottom sheets仅仅在底部显示一部分布局。显示高度能够通过 app:behavior_peekHeight 设置(默认是0)
- STATE_DRAGGING : 过渡状态。此时用户正在向上或者向下拖动bottom sheet
- STATE_SETTLING: 视图从脱离手指自由滑动到终于停下的这一小段时间
*STATE_EXPANDED: bottom sheet 处于全然展开的状态:当bottom sheet的高度低于CoordinatorLayout容器时,整个bottom sheet都可见;或者CoordinatorLayout容器已经被bottom sheet填满。
STATE_HIDDEN : 默认无此状态(可通过app:behavior_hideable 启用此状态),启用后用户将能通过向下滑动全然隐藏 bottom sheet
请记住。bottom sheet中的滑动容器(scrolling container)必须支持嵌套滑动(比方 NestedScrollView, RecyclerView, 或者API 21以上的ListView/ScrollView)。
假设你想接收状态改变的回调。能够加一个BottomSheetCallback:
// The View with the BottomSheetBehavior
View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);
BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
behavior.setBottomSheetCallback(new BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
// React to state change
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
// React to dragging events
}
});
BottomSheetBehavior将能帮你实现 常驻bottom sheet( persistent bottom sheet)的场景, 但这个版本号还提供了BottomSheetDialog 和 BottomSheetDialogFragment 来实现 modal bottom sheets的场景。仅仅须要将AppCompatDialog 或者AppCompatDialogFragment分别替换成上述的两个控件。你就拥有了 bottom sheet 风格的对话框。
v4支持库: MediaBrowserServiceCompat
utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#v4">v4支持库
在之前的版本号,我们引入了MediaSessionCompat 类,以给力的支持媒体播放。此版本号我们又加入了MediaBrowserServiceCompat 和 MediaBrowserServiceCompat,以便支持在API 4 或更高版本号上使用最新的API(甚至是Marshmallow刚引入的)。这样在Android Auto 上的音频播放以及Android Wear上的媒体浏览将更简单,同一时候也提供了统一的接口来关联媒体播放服务和UI。
RecyclerView
RecycleView控件提供了高级灵活的方式来生成list和grid,也支持动画。这个版本号的 LayoutManager API 有了激动人心的新特性:auto-measurement!它使得RecyclerView能依据所包括的内容来确定自己的尺寸。这意味着之前不可用的某些场景。比方WRAP_CONTENT属性在RecycleView中的应用,如今已经能够应用了。
你会发现全部库已有的LayoutManagers子类都默认支持auto-measurement
因为上述的改变,请务必细致检查你写的item views的布局參数:之前被忽略的布局參数(比方滑动方向的MATCH_PARENT)如今将发挥作用。
假设你自己定义的 LayoutManager 子类并不继承自库已有的LayoutManagers子类, auto-measurement 将是一个可选的 API ——通过 setAutoMeasureEnabled(true) 以及该方法的凝视文档(Javadoc)中所提到的一些细微的改变。
请注意 RecyclerView 能够在子view上附加动画,但并不支持自己边界改变的动画。假设你须要bounds边界改变时有动画效果,请使用 Transition APIs.
Custom Tabs
utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">Custom Tabs
在此版本号,你将能为底部栏(bottom bar)加入操作项(action),显示在web内容旁边。
有了新的addToolbarItem()方法,你将(眼下)能加入5(MAX_TOOLBAR_ITEMS)个操作项,并在之后使用setToolbarItem()更新这些操作项。跟之前的 utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#setToolbarColor%28int%29">setToolbarColor()
Leanback for Android TV
Leanback Library 库提供了一些工具来帮助你更简单的将APP移到 Android TV 上,并优化一些标准组件以适应电视体验。GuidedStepFragment在这个版本号中有了重大的多处的改进。
最直观的改变或许是操作button的二级栏的进入(通过覆写onCreateButtonActions方法或者调用setButtonActions()方法)。这样用户不须要滑动整个可用GuidedActions的list就能够完毕操作流程。
说到GuidedActions,此版本号加入了非常多新特性来丰富用户输入,包括可编辑的描写叙述(通过descriptionEditable()),拉下菜单形式的二级操作(通过subActions),以及GuidedDatePickerAction。
当你确实须要从用户那儿获取信息时,这样组件是你的好帮手。
现已公布
通过 SDK Manager 和 Android Studio,你就能获取23.3版本号的安卓支持库。
立即開始使用全部最新的功能吧!我们还修复了一些bug哦。跟曾经一样,请在b.android.com上报告bug,在 Google+ 社区安卓开发板块 跟其它开发人员交流
由 Reto Meier 上传
Android Support Library 23.2介绍(翻译自官方文档)的更多相关文章
- Android Support Library 23.2用法简析
写在前面的几句话 前几天谷歌发布了android-support-library-23.2支持库,这一次23.2版本增加了一些新的支持库以及新的功能.接下来这篇文章,就是对这些新功能部分做简单的用法介 ...
- 手动安装Android Support Library(23.0.1)
在搭建React-Native开发环境的时候,使用Android Sdk Manager无法找到Android Support Library这一项. 所以google了一下,找到了解决办法. 访问A ...
- 自己翻译 delegation 官方文档
什么是代理,知道怎么用,见过N次.会用代理传值,还不够.代理到底是用来干嘛的嘛?还是看看官方文档吧,自己翻译出来看看是不是通顺 代理: 代理是一个简单高效的模式,尤其是一个类在编程的过程中代表或者需要 ...
- 为开源社区尽一份力,翻译RocketMQ官方文档
正如在上一篇文章中写道:"据我所知,现在RocketMQ还没有中文文档.我打算自己试着在github上开一个项目,自行翻译."我这几天抽空翻译了文档的前3个小节,发现翻译真的不是一 ...
- [翻译]PyMongo官方文档
PyMongo官方文档翻译 周煦辰 2016-06-30 这是本人翻译的PyMongo官方文档.现在网上分(抄)享(袭)的PyMongo博客文章很多,一方面这些文章本就是抄袭的,谈不上什么格式美观,另 ...
- Apache Flume入门指南[翻译自官方文档]
声明: 根据官方文档选择性的翻译了下,不对请指正 https://flume.apache.org/FlumeUserGuide.html
- 我为什么要翻译ES6官方文档
ES6出来很久了,现在网上也有很多教程,其中以阮一峰老师的教程最为经典.大家通过学习阮老师的教程肯定能学懂ES6最新的技术. ES6官方文档是一个规范,各浏览器在实现ES6的具体API时都会遵循它.我 ...
- 【Android开发】Android Host详解(翻译自官方文档)
原文:http://android.eoe.cn/topic/summary 文档内容 API概述 Android中manifest文件需求 工作的设备 * 发现设备 * 获得和设备进行“交流”的权限 ...
- [技术翻译]Guava官方文档Ordering
关于排序 Guava的链式比较器 例子 assertTrue(byLengthOrdering.reverse().isOrdered(list)); 梗概 Ordering是Guava的链式比较器类 ...
随机推荐
- PageObject&PageFactory
几篇介绍PageObject&PageFactory文章: PageFactory: http://code.google.com/p/selenium/wiki/PageFactory Pa ...
- 使用com.jayway.jsonpath.JsonPath包进行JSON的快速解析、设置值需要注意的性能提升方法
一.包地址 1.Maven:http://mvnrepository.com/artifact/com.jayway.jsonpath/json-path <!-- https://mvnrep ...
- Linux下验证码无法显示,Could not initialize class sun.awt.X1 解决方案
环境:Oracle Linux 6.4,JDK1.6,Weblogic11g 在通过java.awt生成图片验证码时,提示: Could not initialize class sun.awt.X1 ...
- 003-Go初探Iris
1.参考资源:https://iris-go.com/v10/start#Getting-Started 2.首先下载:go get -u github.com/kataras/iris,此处时间较长 ...
- XWindow、Server、Client和QT、GTK之间的关系
X WINDOW X Window从逻辑上分为三层:X Server.X Client和X协议.最底层的X Server(X服务器)主要处理输入/输出信息并维护相关资源,它接受来自键盘.鼠标的操作并将 ...
- VirtualBox安装CentOS实现鼠标自动切换和复制粘贴
1. 输入命令: cd /media 2. 输入命令: sh VBoxLinuxAdditions.run 3. 可能会出现错误: 解决的办法是依次输入命令: yum install update y ...
- HDU2717 Catch That Cow 【广搜】
Catch That Cow Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- 〖Android〗CyanogenMod同步错误的解决
1. 错误信息: repo sync CyanogenMod/Superuser Fetching project CyanogenMod/Superuser Fetching projects: % ...
- 源代码解析Android中View的layout布局过程
Android中的Veiw从内存中到呈如今UI界面上须要依次经历三个阶段:量算 -> 布局 -> 画图,关于View的量算.布局.画图的整体机制可參见博文 < Android中Vie ...
- Echarts饼图更改颜色、显示数据且换行
var option = { title : { text: '数据来源', x:'center' }, tooltip : { trigger: 'i ...