博客原文地址:http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html,要想打开,请FQ。

Android 5.0 SDK在上周五发布,它以新的UI控件、材料设计-我们专注于良好设计的可视化语言为特色。为了能够让你把最新的设计应用到之前的Android平台上,我们扩展了我们的支持包,包括具有较大更新的AppCompat,同样还有新的RecyclerView、CardView和Patette包。

AppCompat新特性

AppCompat(也叫ActionBarCompat)开始的时候是作为运行在Gingerbread上面的设备的Android 4.0 ActionBar API的相反移植,提供了紧接相反移植实现和框架实现的通用API层。 AppCompat v21交付了与Android 5.0一样最新的API和特性集。

在本次发布中,Android引进了新的Toolbar控件。它是给了你更多可控性和灵活性的Action Bar模式的泛化。就像其它的一样,在层次结构中,Toolbar只是一个视图,但却使得与其它视图交错、产生动画效果和对滑动事件产生回应更加容易。你也可以把它设置为Activity的action bar,这意味着标准选项按钮活动将展示在Toolbar里面。

最新更新的AppCompat,你可以已经在使用了一段时间,在过去几周中,它已经包含在多种Google应用更新中,如Play Store, Play Newsstand。它也已经集成到Android应用Google I/O中,就像上面的图片展示的那样,当然,Google I/O是开源的。

设置

如果你在使用Gradle,那么请把AppCompat在你的build.gradle文件中作为一个依赖添加进去。

1 dependencies {2     compile "com.android.support:appcompat-v7:21.0.+"3 }
View Code

新整合

如果你当前没在使用AppCompat,或者正要重头开始,下面将告诉你如何设置:

  1. 所有的Activity必须继承自ActionBarActivity,当然,ActionBarActivity继承自v4支持包中的FragmentActivity,这样你就可以继续使用fragment。
  2. 所有的主题(想要使用Action Bar/Toolbar)必须继承自Theme.AppCompat。其中有许多的变体可用,包括Light和NoActionBar。
  3. 在Action Bar上填充展示任何东西(例如在toolbar中列表导航的SpinnerAdapter)时,确保使用action bar的特定主题context时,通过getSupportActionBar().getThemedContext()获得。
  4. 必须为MenuItem中的任何有关action的调用使用MenuItemCompat中的静态方法。

想获取更多信息,请查看Action Bar API入门,它是有关AppCompat的综合性入门。

从先前设置中迁移

对于大多数应用,只需要在values/下声明一个主题:

 1 values/themes.xml: 2  3  4  5 <style name="Theme.MyTheme" parent="Theme.AppCompat.Light"> 6  7     <!-- Set AppCompat’s actionBarStyle --> 8  9     <item name="actionBarStyle">@style/MyActionBarStyle</item>10 11 12 13     <!-- Set AppCompat’s color theming attrs -->14 15     <item name=”colorPrimary”>@color/my_awesome_red</item>16 17     <item name=”colorPrimaryDark”>@color/my_awesome_darker_red</item>18 19     20 21     <!-- The rest of your attributes -->22 23 </style>
View Code

你现在可以移除有关values-v14+的所有Action Bar风格了。

定制主题

AppCompat支持新的调色板属性,从而允许你可以轻易地自定义主题以通过primary和accent色彩来适配你的品牌。例如:

 1 values/themes.xml: 2  3  4  5 <style name="Theme.MyTheme" parent="Theme.AppCompat.Light"> 6  7     <!-- colorPrimary is used for the default action bar background --> 8  9     <item name=”colorPrimary”>@color/my_awesome_color</item>10 11 12 13     <!-- colorPrimaryDark is used for the status bar -->14 15     <item name=”colorPrimaryDark”>@color/my_awesome_darker_color</item>16 17 18 19     <!-- colorAccent is used as the default value for colorControlActivated,20 21          which is used to tint widgets -->22 23     <item name=”colorAccent”>@color/accent</item>24 25 26 27     <!-- You can also set colorControlNormal, colorControlActivated28 29          colorControlHighlight, and colorSwitchThumbNormal. -->30 31     32 33 </style>
View Code

当你设置这些属性时,AppCompat自动扩散这些值到API 21+上面的框架属性。它将自动地为状态条和任务概览着色。

在更老平台上,AppCompat在任何可能的地方模拟这种颜色主题。只是此时,为action bar和一些控件着色受到限制。

控件着色

运行在Android 5.0上的设备时,所有的控件都是通过刚刚讨论过的颜色主题属性着色。有两个特性允许在Lollipop上进行控件着色:drawable着色和在drawable中引用主题属性(如attr/foo的形式)。

  1. AppCompat为之前Android版本的以下控件子集提供相似的行为:
  2. AppCompat Toolbar提供的一切(action模式等)
  3. EditText
  4. Spinner
  5. CheckBox
  6. RadioButton
  7. Switch(使用新的android.support.v7.widget.SwitchCompat)
  8. CheckedTextView

为了使这些控件起作用,你不必做任何特别的事,只需要像往常一样在布局中使用这些控制信息,AppCompat将会完成其余的事情。

Toolbar控件

AppCompat完全支持Toolbar而且,Toolbar拥有同行于框架控件的特性和API。在AppCompat中,Toolbar在android.support.v7.widget.Toolbar类中实现。有两种方式使用Toolbar:

在想要使用业已存在的Action Bar设备但想要更多地控制界面时(如菜单填充和选择,ActionBarDrawerToggle等等),把Toolbar当Action Bar一样使用。

对于Action Bar不支持的场景,当想要在应用中使用这种模式时,使用单独的Toolbar;例如,在屏幕上展示多个工具条,悬跨部分宽度等等。

Action Bar

为了把Toolbar当Action Bar一样使用,首先要禁用提供装饰品的Action Bar。最简单的方式是使用继承自Theme.AppCompat.NoActionBar(或它的Light变体)的主题。

其次,通常通过布局文件创建Toolbar实例:

 1 <android.support.v7.widget.Toolbar 2  3     android:id=”@+id/my_awesome_toolbar” 4  5     android:layout_height=”wrap_content” 6  7     android:layout_width=”match_parent” 8  9     android:minHeight=”?attr/actionBarSize”10 11     android:background=”?attr/colorPrimary” />
View Code

高度、宽度、背景等等,完全取决于你;这些就是好的例子。因为Toolbar也只是一个ViewGroup,你可以给它设置任何你想要的风格和大小。

然后在Activity划Fragment中,把Toolbar设置为你的Action Bar:

 1 @Override 2  3 public void onCreate(Bundle savedInstanceState) { 4  5     super.onCreate(savedInstanceState); 6  7     setContentView(R.layout.blah); 8  9 10 11     Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);12 13     setSupportActionBar(toolbar);14 15 }
View Code

从这里之后,所有的菜单选项将会展示在Toolbar中,并通过标准选项菜单回调来产生之后的代码。

脱机使用

脱机模式的不同在于不必设置Toolbar像Action Bar一样活动。由此,可以使用任何AppCompat主题,且不必禁用提供装饰的Action Bar。

在脱机模式下,需要手工地通过content/actions来产生Toolbar相关的代码。例如,如果想要展示action,你需要在里面填充菜单:

 1 @Override 2  3 public void onCreate(Bundle savedInstanceState) { 4  5     super.onCreate(savedInstanceState); 6  7     setContentView(R.layout.blah); 8  9 10 11     Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);12 13 14 15     // Set an OnMenuItemClickListener to handle menu item clicks16 17     toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {18 19         @Override20 21         public boolean onMenuItemClick(MenuItem item) {22 23             // Handle the menu item24 25             return true;26 27         }28 29     });30 31 32 33     // Inflate a menu to be displayed in the toolbar34 35     toolbar.inflateMenu(R.menu.your_toolbar_menu);36 37 }
View Code

有了Toolbar,你可以做许多其它的事件。想要获取更多的的信息,请参见Toolbar API。

定制风格

对于标准Action Bar,Toolbar的风格定制是完成的不一样的,是直接设置在它的视图上的。

当把Toolbar当Action Bar使用时,应用使用如下基本的风格:

1 <android.support.v7.widget.Toolbar  2 3     android:layout_height="wrap_content"4 5     android:layout_width="match_parent"6 7     android:minHeight="?attr/actionBarSize"8 9     app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />
View Code

app:theme声明将确保文本和子项在使用solid色彩。

DarkActionBar

可以使用布局属性来直接设置Toolbar实例的风格。为了获取一个看起来像DarkActionBar(dark内容,light overflow menu)的Toolbar,提供了theme和popupTheme属性:

 1 <android.support.v7.widget.Toolbar 2  3     android:layout_height=”wrap_content” 4  5     android:layout_width=”match_parent” 6  7     android:minHeight=”@dimen/triple_height_toolbar” 8  9     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"10 11     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
View Code

SearchView控件

AppCompat提供了Lollipop更新过的SearchView API,它是可以高度自定义和风格设置化的。我们现在使用Lollipop风格结构而不是老的searchview*主题属性.

如下设置SearchView属性:

 1 values/themes.xml: 2  3 <style name=”Theme.MyTheme” parent=”Theme.AppCompat”> 4  5     <item name=”searchViewStyle”>@style/MySearchViewStyle</item> 6  7 </style> 8  9 <style name=”MySearchViewStyle” parent=”Widget.AppCompat.SearchView”>10 11     <!-- Background for the search query section (e.g. EditText) -->12 13     <item name="queryBackground">...</item>14 15     <!-- Background for the actions section (e.g. voice, submit) -->16 17     <item name="submitBackground">...</item>18 19     <!-- Close button icon -->20 21     <item name="closeIcon">...</item>22 23     <!-- Search button icon -->24 25     <item name="searchIcon">...</item>26 27     <!-- Go/commit button icon -->28 29     <item name="goIcon">...</item>30 31     <!-- Voice search button icon -->32 33     <item name="voiceIcon">...</item>34 35     <!-- Commit icon shown in the query suggestion row -->36 37     <item name="commitIcon">...</item>38 39     <!-- Layout for query suggestion rows -->40 41     <item name="suggestionRowLayout">...</item>42 43 </style>
View Code

不必设置全部属性,默认值对大多数应用起作用。

Toolbar即将到来……

我希望,这篇博客能够帮助你站起来和AppCompat一直奔跑并鼓励你创建优秀的材料设计风格的应用。如果你有任何有关AppCompat或者其它任何支持包的问题,请让我们在G+/Twitter的评论或者我们能够提供更多文档的地方知道。

更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. android app 启动会白屏的解决办法
  6. Android中ContentProvider简介
  7. Android(安卓)Layout XML属性
  8. Android中使用animation的方法
  9. 相对布局(RelativeLayout)写的QQ登录界面

随机推荐

  1. HTML语言基础之——掌握HTML的写法(2)
  2. html5 的 canvas 想写个小项目 画板
  3. 翻译:HTML5与HTML4的区别
  4. 关于html5 audio 标签在ios系统上不能正
  5. HTML 5自动对焦会混乱CSS加载
  6. JSF和HTML表单的Unicode问题?
  7. SpringBoot + Thymeleaf + JPA创建一个we
  8. HTML 5是否需要``
  9. commons-fileupload文件上传、下载
  10. 在IE(所有版本)中打破JQuery自动完成组合框