Android 5.0(L) ToolBar(替代ActionBar) 实战(四)

来源:互联网 发布:华为云计算部门年终奖 编辑:程序博客网 时间:2024/04/28 18:16

如果此前你是跟着连载一步一步走下来的,那么你应该会注意到MainActivity是一直在报警告的。因为其中我们声明了toolbar对象,但是一直没有使用。如果要实现菜单功能的话,就要使用了。

结合Toolbar使用菜单还是很容易的。只需在MainActivity中重写onCreateOptionsMenu()和onOptionsItemSelected()就可以了。这种方法已经有着悠久的历史,这里就不再多说了。

回忆一下ActionBar,此前的ActionBar在实现菜单时,如果遇到虚拟按键的机器,会在Activity的右上角显示菜单。如果遇到实体按键的机器,则不会,用户需要手动去触摸菜单键才能激活菜单。这其实是不太合理的,作为用户,很有可能不知道应用中还有菜单。因此,在Toolbar中,这个问题得到了很好的修复。效果就是,无论是否存在实体按键,右上角都会显示菜单,而要实现这一效果也是及其容易的,只需要下面的一句话:

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. setSupportActionBar(toolbar);  

下面放上效果图:


细心的朋友可以发现,上方的Toolbar已经改变了样式,那么它又是如何实现的呢?

这里有两种方法:

1)在每个具有Toolbar的布局文件中定义风格;

2)在AndroidManifest中指向统一的应用主题样式。

前者不必多说,只需要在布局文件中指定特定字段的值就好。这里详细说下后者。

首先我们在布局文件中,除了Toolbar的位置、标题文本和ID外,不要给定任何其他的值,比如:

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <android.support.v7.widget.Toolbar  
  2.        android:id="@+id/demo_toolbar"  
  3.        android:layout_width="fill_parent"  
  4.        android:layout_height="wrap_content"  
  5.        app:title="@string/hello_world" />  
然后,在values文件夹中创建theme.xml,在其中定义主题风格,下面列出这段程序清单:

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources xmlns:android="http://schemas.android.com/apk/res/android">  
  3.   
  4.     <!-- 默认的蓝色风格 -->  
  5.     <style name="DefaultBlueTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">  
  6.         <!-- Toolbar风格 -->  
  7.         <item name="toolbarStyle">@style/DefaultBlueToolbar</item>  
  8.     </style>  
  9.   
  10.     <!-- 默认的Toolbar样式 -->  
  11.     <style name="DefaultBlueToolbar" parent="@style/Widget.AppCompat.Toolbar">  
  12.         <item name="android:background">@color/default_blue</item>  
  13.         <item name="titleTextAppearance">@style/ToolBarTitleTextStyle</item>  
  14.     </style>  
  15.   
  16. </resources>  
引用的颜色值如下,在color.xml中定义:

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <color name="default_blue">#33B5E5</color>  
  2. <color name="default_white">#FFFFFF</color>  
这样就实现了上图的效果。
0 0