本文介绍了Design Support Library的使用及包含的组件。
概述
在Google I/O 2015大会上,谷歌发布了新的 design support library,带来了很多材料设计组件包括抽屉导航,悬浮标签,悬浮按钮,snackbars和配合动作和滚动事件的新框架。类库支持Android 2.3及以上。
特性
材料设计支持库包含以下关键特性:
1.FloatingActionButton——右下角圆形按钮表示界面的主要动作。
2.TabLayout——一种简单的方法把tabs放到ViewPager
周围用作在Fragment之间滑动tabs。
3.NavigationView——提供一个从左滑出的导航抽屉带有一个headerview和一些导航Items。
4.SnackBar——显示在屏幕底部并且包含文本和可选的一个动作。在给定的时间自动滑出屏幕。
5.TextInputLayout——在任何文本域上面悬浮提示用户输入的信息和添加字符计数。
6.CoordinatorLayout 在子View之间的滚动和触摸事件提供额外的控制级别。
- AppBarLayout ——对于滚动事件允许toolbar和其它View相互作用。
- CollapsingToolbarLayout ——用户通过View滚动时可以折叠toolbar。
- Bottom Sheets——从屏幕底部向上滑出材料设计的表。
7.PercentRelativeLayout和PercentFrameLayout可以让View占据百分比尺寸。
8.Vector Drawables为了减少需要包含每个密度大小的图片。
- Vector drawables向后兼容到 Android 2.1 (API 7),但动画的animated vector drawables只能向后兼容到 Android 3.0 (API 11)。
9.Android View层级动画使用过渡(Transitions)框架向下兼容至Android 4.0(API 14)
10.Bottom Navigation Views——方便切换在3到5个Tab Item之间。
配置
支持Android Gradle v2.1.0及以上版本。1
2
3dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
}
这是新的材料设计库必须引入的。这个类库也依赖于引入的AppCompat的版本。如果你没有使用这个类库,查看迁移指南。除此之外,确保这些版本也已更新。
修改根目录下的build.gradle
文件:1
2
3
4
5
6
7android {
compileSdkVersion 25 // usually needs to be consistent with major support libs used, but not necessary
}
ext {
supportLibVersion = '25.2.0' // variable that can be referenced to keep support libs consistent
}
在app/build.gradle
文件中添加依赖:1
2
3
4dependencies {
compile "com.android.support:appcompat-v7:${supportLibVersion}"
compile "com.android.support:design:${supportLibVersion}"
}
如果你使用了RecyclerView,CardView,或其它support v7相关的类库你也需要更新这些版本。例如RecyclerView有特性使用了最新的材料设计支持库。1
2
3dependencies {
compile "com.android.support:recyclerview-v7:${supportLibVersion}"
}
添加百分比类库
添加百分比类库依赖:1
2
3dependencies {
compile "com.android.support:percent:${supportLibVersion}"
}
添加Vector Drawable类库
Android Studio v1.4为vector drawables提供向后兼容的支持,通过为Android 5.0之前的设备在编译时自动创建PNG资源。这个类库解决了必须为老的Android版本提供vector drawable支持,但我们首先需要启用这个自动生成工具通过在app/build.gradle
文件添加配置:
1 | // This config only works for Android Gradle Plugin v2.1.0 or higher: |
最后,添加依赖:1
2
3
4dependencies {
compile "com.android.support:support-vector-drawable:${supportLibVersion}" // VectorDrawableCompat
compile "com.android.support:animated-vector-drawable:${supportLibVersion}" // AnimatedVectorDrawableCompat
}
详细用法请查看vector drawables指南。
添加过渡类库
过渡(Transitions)API最先在Android 4.4 (KitKat) 中引入,现在为支持View层级动画兼容到Android 4.0。但是,对于activity/fragment的过渡是不支持的。为了使用这个类库,需要添加依赖:1
2
3dependencies {
compile "com.android.support:transition:${supportLibVersion}"
}
添加注解类库
为了利用注解(Annotations)类库,你也可以在gradle文件中明确指定添加它。添加AppCompat或指定添加它:
1 | dependencies { |
安装类库
你通常需要打开SDK Manager确保已经下载了最新的Android Support Repository
和Android Support Library
。当有类库缺失时Android Studio会在下面提示,你可以点击Install repository and sync project
。只有当指定了有效的类库和版本才会处理成功,它会开始升级不需要打开SDK Manager。
如果你使用了任何类型的连续构建系统并且需要自动下载和更新support类库,你可以使用Jake Wharton’s SDK Manager下载安装包。
示例代码
如果你想查看不同组件如何使用,可以查看示例代码 及 百分比类库示例代码。
官方源码
Android开源工程(AOSP) 为这个类库挂载了主要发布版本,可以从这里找到。例如,如果你好奇对于不同的组件什么的样式可以被重写,查看这个链接。
从v23.1.0版本开始support类库的修改会包含在SDK目录中(例如:Mac OS X系统中目录为Library/Android/sdk/extras/android/m2repository/com/android/support/design
)
修改日志
Support Library v23
Resources.getColor()
被弃用。现在使用ContextCompat.getColor()
代替。查看Stack Overflow 的文章或官方API文档。
Support Library v23.1
TextInputLayout
和EditText
现在可以添加一个字符计数。(使用介绍)snap
标志也被添加到滚动列表中影响AppBarLayout。(使用介绍)AppBarLayout
中添加setOnDragListener()
方法。(使用介绍)PercentRelativeLayout
现在支持aspectRatio
属性。(使用介绍)RecyclerView
新的item动画接口。(使用介绍)NavigationView
支持自定义View行。(使用介绍)
Support Library v23.1.1
- NavigationView添加
getHeaderView()
方法。(使用介绍)Support Library v23.2
- 添加对bottom sheets的支持。(使用介绍)
- 为vector drawables添加配置说明。(使用介绍)
Support Library v24.2.0
TextInputLayout
和EditText
现在包含切换密码可见性的开关。(使用介绍)- 为RecyclerView添加了DiffUtil类。(使用介绍)
- Support v4类库模块已经分离出来,但这并不能减少APK的大小,因为fragment类库还依赖于所有其它相关模块。(使用介绍)
- 过渡(Transitions)API向后兼容到Android 4.0,但不包括对activity/fragment过渡的支持。(使用介绍——(译)View层级动画)
Support Library v25.0.0
- 添加底部导航支持-BottomNavigationView(使用介绍)
参考
- https://medium.com/android-bites/first-steps-with-the-design-support-library-8dcf06230ddd
- http://android-developers.blogspot.com/2015/05/android-design-support-library.html
- https://github.com/chrisbanes/cheesesquare
- http://hmkcode.com/material-design-app-android-design-support-library-appcompat/
- https://medium.com/ribot-labs/exploring-the-new-android-design-support-library-b7cda56d2c32
- https://plus.google.com/+AndroidDevelopers/posts/XTtNCPviwpj
- https://code.google.com/p/android/issues/list?can=1&q=label%3AVersion-22.2.1
- https://plus.google.com/+AndroidDevelopers/posts/RZutBRWN6sH?linkId=17978076
- https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88#.dvbsz7sts
- https://plus.google.com/+AndroidDevelopers/posts/iTDmFiGrVne
- https://www.reddit.com/r/androiddev/comments/4y70e7/android_support_library_v242_released/