安卓开发者勃客翻译:安卓支持库23.2,Android Support Library 23.2
说到所谓
的安卓支持库,有一点狠重要,必须明白,那就是,它并不是一个单一的软件库,
而是一个
软件
库集合
,为以下目的而生:
为各个应用编程接口提供后向兼容版本
;
以及,
在并非是最新平台版本的平台上提供
与最新平台一致的特性。版本
23.2
,加入了一些新的支持库,并且
为其中狠多已有的库加入了新的特性。
向量绘图对象
,使得妳能够将多个png 图片替换成单个以XML 定义的向量图形。之前
,这个特性只能用于
棒棒糖(Lollipop)及更高版本的设备,而如今,因为两个
新的支持库
support-vector-drawable
和
animated-vector-drawable
的
加入,
VectorDrawable
和
AnimatedVectorDrawable
都能够用于较低版本的系统中了。
Android Studio 1.4
加入
了对于向量绘图对象的有限支持,
其具体做法就是
在编译期间生成
png
。
要禁用这个功能
(进而通过
这个支持库的能力达到真正节省空间
的目的
)
,
妳
需要
在
build.gradle
文件中加上
vectorDrawables.useSupportLibrary = true
:
// Gradle Plugin 2.0+
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
注意,这个新的属性,只在Gradle 插件的2.0 以上版本中存在。如果妳使用的是Gradle 1.5,那么,应该按照如下方式修改
// Gradle Plugin 1.5
android {
defaultConfig {
generatedDensities = []
}
// Gradle 插件2.0+版本 会处理以下内容
aaptOptions {
additionalParameters "--no-version-vectors"
}
}
如果
妳使用的是AppCompat 23.2.0,那么
,必须设置这些标志位。
在
AppCompat 23.2.1
中,这个要求已经放宽,
仅当妳需要使用支持向量绘图对象时,才需要设置这些标志位。
VectorDrawableCompat
可在API 7 及更高版本使用,
AnimatedVectorDrawableCompat
可在API 11 及更高版本使用。由于安卓载入绘图对象方面
的某些限制,并非所有
的接受绘图对象编号的地方
(例如XML布局文件
中
)
都会支持载入向量绘图对象。幸运
的是,
AppCompat
中加入了一些新特性,可以帮助妳
更轻松地使用新的向量绘图对象。
首先
,在AppCompat 中使用
ImageView
(
或它的子类,例如
ImageButton
和
FloatingActionButton
)的时候,
可以使用新的
app:srcCompat
属性来引用向量绘图对象(包括其它
的
可使用
android:src
来引用的绘图对象类型
):
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_add" />
并且
,如果妳想要在运行时改变绘图对象的话,
可照常使用
setImageResource()
方法
-
这个方面没有变化。
使用
AppCompat
和
app:srcCompat
,是在妳的应用中整合向量绘图对象的最简单方法。
妳会发现,在棒棒糖(Lollipop)之前的版本中,
未通过
app:srcCompat
来引用向量绘图对象的话,会失败。
自
安卓支持
库
23.3.0
开始,支持向量绘图对象
只可通过
app:srcCompat
或
setImageResource()
来载入……
在应用中加入对向量图形的支持,已经是AppCompat 中的一个巨大改变。而另一个巨大的改变是,这个版本中,向AppCompat 中加入了一个新的主题: Theme.AppCompat.DayNight 。
在API 14 之前
的系统版本中
,
DayNight
主题
,以及它的后代
主题,
DayNight.NoActionBar
、
DayNight.DarkActionBar
、
DayNight.Dialog
等等,
会变成Light
族中的等价主题。
而在
API 14
及更高版本系统的设备上,
就厉害了,
这个主题能够轻松
地
实现同时支持明亮
(
Light
)主题和暗淡(
Dark
)主题,产生
的效果就是,基于当前时间
是否是在“夜晚”而在明亮主题和暗淡主题之间切换。
默认情况
下,对于“夜晚”的判断,是基于一个系统值的
(来自
于
UiModeManager.getNightMode()
)
,但是
妳也可以覆盖那个值,具体的覆盖方法在
AppCompatDelegate
中。
有两种手段可以达到这个目的:使用静态
的
AppCompatDelegate.setDefaultNightMode()
方法来设置整个应用(
在进程重启之前保持有效
)的默认值;或者
,通过
getDelegate()
获取到一个AppCompatDelegate,
再使用
setLocalNightMode()
来改变当前
Activity
或
Dialog
的对应值。
如果使用
的是
AppCompatDelegate.MODE_NIGHT_AUTO,
,则,
会使用当前时间及妳的最后一次已知位置
(如果
妳的应用拥有获取位置权限的话
)
来自动进行白天和黑夜之间的切换
。而
MODE_NIGHT_NO
和
MODE_NIGHT_YES
则分别会强制禁止和启用暗淡主题。
当使用
DayNight
主题时,必须彻底地测试妳的应用,因为
,硬编码的颜色
值狠容易导致出现无法辨认的文本内容和图标。如果
妳使用的是标准的
TextAppearance.AppCompat
风格,或者使用的是从主题中获取到的颜色值,例如
android:textColorPrimary
,那么,妳会发现,这些值都会自动为妳更新了。
然而
,如果妳确实需要针对暗淡模式
自定义某些资源的话,那么,仍然是有办法的。
AppCompat
也利用了
night
资源标识目录
,
这样,就能够
对妳认为有必要的任何资源进行自定义了。
请考虑利用标签颜色
,或者利用AppCompat 中的色调(tinting)支持功能,
以使得自己能够更轻松地支持这种模式。
设计支持 库 ,实现 了 材料设计 中的狠多模式。 本个版本中,加入 了特性,使得开发者能够轻松地向她/他们的应用中加入 底部表单 。
在给某个 CoordinatorLayout 的某个子代视图( View )关联上了 BottomSheetBehavior 之后 ( 也就是说,加上属性 app:layout_behavior="android.support.design.widget.BottomSheetBehavior" ) , 就会自动获得适当 的触摸动作检测能力, 以支持在 五种状态之间迁移:
•. STATE_COLLAPSED: 这个折叠状态是默认状态,只会 在底部显示 出该布局的一小砣。 其高度可通过 app:behavior_peekHeight 属性来控制 (默认 值是 0)
•. STATE_DRAGGING: 中间状态,此时用户正在直接将底部表单拉出或收起
•. STATE_SETTLING: 短暂 的状态,此时, 该个视图 (View) 已经完全出现,即将进入最终位置
•. STATE_EXPANDED: 底部表单 的完全展开状态,此时 ,会是两种情况之一:整个底部表单可见 (前提 是其高度小于其容器 CoordinatorLayout ) ;或者,整个 CoordinatorLayout 被填满
•. STATE_HIDDEN: 此状态默认被禁用 ( 可通过 app:behavior_hideable 属性来启用 ) ,启用 这个状态的话, 就使得用户可以在底部表单上向下滑动,以完全隐藏整个底部表单
注意
,底部表单
中的滚动区域容器必须支持嵌套滚动
(例如
,使用
NestedScrollView
、
RecyclerView
或在API 21+中使用
ListView/ScrollView
)
。
如果
妳想要收到对于这些状态变更的回调,那么,可以添加一个
BottomSheetCallback
:
// 带有BottomSheetBehavior 的 View
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) {
// 对状态变更进行响应
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
// 对拖动事件进行响应
}
});
本已 有了 BottomSheetBehavior 来支持 持久底部表单 使用场景 。除此之外,这个版本中,还提供了 BottomSheetDialog 和 BottomSheetDialogFragment , 以支持 模态底部表单 使用场景。 只需要将 AppCompatDialog 或 AppCompatDialogFragment 替换成对应的底部表单类,即可让妳的对话框表现成底部表单。
支持
库
v4版本
库
,
是狠多支持库的基础,其中包含
了狠多对于平台较新版本中的框架功能的后向移植
(
同时有
若干独特特性
)
。
在之前发布的版本中所包含的
MediaSessionCompat
类的基础上,
为了提供一个
更一致的媒体回放基础框
架,
在本版本中,加入
了
MediaBrowserServiceCompat
和
MediaBrowserCompat
。它们组成
了一个兼容性解决方案,将最新的
()
应用编程接口带入到
(甚至包括那些
在棉花
糖(
Marshmallow
)
中加入的接口
)所有
的
API 4
及更高版本的设备上。
从此之后,
可以更容易地支持
安卓汽车
中的音频回放
,
更容易地
在安卓穿带中浏览媒体文件,并且
,还提供
了一个标准接口,使得妳的媒体回放服务可以更容易地与界面连接起来。
RecyclerView
部件
,提供了一个先进且灵活的基础,用于
创建列表
及网格
,以及支持
动画
。本
个版本中向
LayoutManager
应用编程接口加入了一个令人激动的新特性:自动计算几何尺寸
!
这样,
RecyclerView
就能够根本其中内容的尺寸来改变自身的尺寸了。
这就意味着,某些在之前无法实现的事情,如今可以实现了,例如,
将
RecyclerView
的尺寸设置为
WRAP_CONTENT
。
妳会发现,所有内置的布局管理器(LayoutManager)如今都支持自动计算几何尺寸了。
正是因为
有这个改变,所以,请检查
一下妳的条目视图中所使用的布局参数:之前
被忽略的布局参数
(例如
在滚动方向上设置的
MATCH_PARENT)如今
会被完全遵守。
如果
妳实现了某个
并不
继承任何一个内置
LayoutManager
的自定义
LayoutManager
,那么,
以下是一个解决方案
-
妳需要调用
setAutoMeasureEnabled(true)
,并且根据
该方法的Javadoc 中的细节说明来做一些微小的改动。
注意
,尽管
RecyclerView
会对它的子代部件实施动画,但是
,它
并不会
对它自己的尺寸变更实施动画。如果
妳想要
对
RecyclerView
的几何尺寸变更实施动画的话,那么,可以使用
变换应用编程接口
。
自定义标签页 , 可用于无缝地变换到网页内容,同时保持妳的应用的整体观感。 在这个版本中, 可以在显示网页内容的同时向底部内容栏中加入动作。
利用 新的 addToolbarItem() 方法,可以在底部内容 栏中加入最多5 (MAX_TOOLBAR_ITEMS) 个动作,并在会话开始后使用 setToolbarItem() 来更新它们。 与之前的 setToolbarColor() 方法类似,新加入的 setSecondaryToolbarColor() 方法用于对底部内容栏的背景颜色进行自定义。
后仰 库 ,提供了若干工具,帮助妳轻松地 将自己的应用移植到安卓电视 。其中 有狠多针对电视的体验进行了优化的标准组件。 在这个版本中, GuidedStepFragment ,发生了狠大的改进。
最明显的变动,应该是,
我们加入了第二个内容列,用于添加动作按钮
(具体
是通过覆盖
onCreateButtonActions()
或调用
setButtonActions()
来添加
)
。
这样,就可以更轻松地接触到完整的动作列表,而不用在可用的
GuidedActions
列表中滚动。
说到
GuidedActions
,它也有若干新特性
,以支持更丰富的输入功能,包括:
可编辑的描述
(通过
descriptionEditable()
来使用
)
;下拉列表形式实现
的子动作
(
subActions()
)
;
以及一个
GuidedDatePickerAction
。
利用这些组件,妳就可以在绝对必要的情况下更轻松地获取到用户输入的信息。
金巧巧
景甜
清纯的美女模特Hedy
杨幂
HxLauncher: Launch Android applications by voice commands