------------------------------------------------------------------------------
GitHub:lightSky
微博: light_sky , 即时分享最新技术,欢迎关注
------------------------------------------------------------------------------
本篇文章翻译自Chris Banes(就职于Google,是Android-PullToRefresh,PhotoView,photup的作者,GitHub地址:https://github.com/chrisbanes,博客地址:https://chris.banes.me/2014/10/17/appcompat-v21/ ,现在这篇文章已经收录到Android官方博客了:http://android-developers.blogspot.jp/2014/10/appcompat-v21-material-design-for-pre.html,下面是翻译正文,末尾介绍了一个已经兼容到5.0之前设备的App,提供2014 Google开发者大会信息的app: Google Iosched,具体信息可以看文章结尾处。
博客正文
android 5.0今天发布。在很多很棒的更新中,包括了新的UI组件和创建 Material Design 主题的能力。为了使你能够将新的设计中更新到旧的系统中,
我们同时更新了包含 AppCompat 的support libraries。在这篇文章中,我将总体说明一下appCompat的新特性并介绍一下如何应用于你的app中。
Android5.0引入了一个新的ToolBar widget,这是一个ActionBar模式的衍生,但为你的使用提供了更多的控制和便利性。
Toolbar 和你的View层级关系中的其它View一样。但它使得界面更容易的与其它部分交互,比如View,动画,Scroll事件的响应。如果你正在使用Gradle,只要把appcompat作为一个依赖库添加到你的build.gradle中即可。
dependencies {
...
compile "com.android.support:appcompat-v7:21.0.0"
}
我们现在在所有的版本上支持Toobar/ActionBar的实现。意味着你在ActionBar中将再也看不到任何的android:属性。(过去为了兼容都需要设置两个属性,一个要带android:的,一个不带)对于那些已经使用AppCompat的app创建,意味着你应该重新设置那些在Android name space 中重置的V14+的主题。
请注意,这些仅仅用于那些影响到ActionBar的属性。
在 API21+ 上,通过设置这些,AppCompat将会自动的将这些值传递到framework的属性中。会自动填充状态栏和最近的任务项的颜色。
所有的东西都由 AppCompat的 toolbar提供你不需要做任何特殊的工作,只需像以前一样在你的布局中使用这些控制并且AppCompat会为你做剩下的工作(请看FAQ)。
EditText
Spinner
CheckBox
RadioButton
Switch(使用supportV7中的SwitchCompat, https://developer.android.com/reference/android/support/v7/widget/SwitchCompat.html)
CheckedTextView
这里有两种方式使用ToolBar:
但还不能够满足你的需求的时候。
不支持ActionBar的情况、在同一个屏幕中使用多个toolbar的情况。
宽、高,背景等等,完全由你来控制,这些只是示例。由于ToolBar只是一个ViewGroup,你可以添加任何样式并放在任何位置。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
}
所有的menu 条目将会在你的ToolBar中展示,通过标准的options menu进行回调。
和上面很类似,但是在这种模式下,你不用去设置ToolBar作为ActionBar使用。由于这个原因,你可以使用任何AppCompat主题并且你不需要禁用decor提供的ActionBar。
当它被独立使用的时候,你需要通过content/actions手动的填充ToolBar、比如,如果你想它展示一些actions,你需要填充一个menu进去。 @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
// Set an OnMenuItemClickListener to handle menu item clicks
toolbar.setOnMenuItemClickListener(
new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
// Handle the menu item
return true;
}
});
// Inflate a menu to be displayed in the toolbar
toolbar.inflateMenu(R.menu.your_toolbar_menu);
}
ToolBar的样式与标准的ActionBar是不一样的。它是被直接设置到View上的。
一个常被开发者问到的问题是,如何实现一个看起来像DarkActionBar的Toolbar(深色的内容,亮色的覆盖在上层的菜单)(这应该是侧边栏滑出时的那种效果),这样的样式可以通过提供theme和popupTheme属性实现:
很明显的,背景,高度,可以由你任意设置,上面只是建议。
很显然,你不需要去设置上面的所有属性,缺省的就已经可以满足大多数App了。
你已经拥有自定义版本的Widget(比如,你继承了EditText)
你通过一个LayoutInflater去创建了一个EditText(比如你调用new EditText)你正在与LayoutInflater的Factory正关联着。
这个特殊的 tint aware Widget 已经被隐藏了,因为它们是一个未完成的实现(这里不太明白是什么意思)。
Google Iosched
相信很多人对这个项目都不会陌生,开源有一段时间了,关键的是随着5.0正式版的推出,它立即向5.0之前的系统做了兼容,相信以后还会持续更新GitHub地址:https://github.com/google/iosched 在我的微盘下提供了一个APK,大家可以先看一下,当然还是希望大家clone源码,仔细研究下,很不错的项目,下载地址:http://vdisk.weibo.com/s/av06eFs1kWSeE?from=page_100505_profile&wvr=6 ,如果没有使用数据,微盘下的另一个Apk或许可以帮到你哦。下面是几张截图,交互很棒,赶紧下载源码去看实现吧,还有个项目也可以关注下:https://github.com/antoniolg/MaterialEverywhere,看名字就知道了
如有不准确的地方,欢迎指正