Android ToolBar使用详解及示例源码

一、ToolBar简介 源码地址
ToolBar是google新推出的导航控件,用于取代ActionBar,包含在5.0版本中,对于低版本可以引人supportv7包进行调用。市面上很多App使用ToolBar进行导航栏创建。ToolBar实际上是一个ViewGroup,可以包含任何的子View。用户可以根据自己的产品需求设计不同的导航栏。下图就是知乎和今日头条的导航栏,风格和内容迥异。
Android ToolBar使用详解及示例源码

二、ToolBar的基本使用
1、在布局文件中引入ToolBar
为了测试效果,我们在ToolBar中添加了一个TextView,效果和代码如下:

Android ToolBar使用详解及示例源码

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme">
<TextView
android:id="@+id/top_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:text="@string/top_title"/>
</android.support.v7.widget.Toolbar>

<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"/>
<!-- meta tag and intent filter go into results activity -->
<meta-dataandroid:name="android.app.searchable"
android:resource="@xml/searchable"/>
<intent-filter>
<actionandroid:name="android.intent.action.SEARCH"/>
</intent-filter>
从上边的图我们可以看到有两个导航栏,一个是我们刚刚新加入的ToolBar,另一个系统默认的ActionBar,下边我们通过主题(theme)来隐藏掉ActionBar
2、主题修改
在通过Android studio新建工程时,会在styles.xml默认指定一个主题,该主题引入了ActionBar:
<stylename="AppTheme"parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<itemname="colorPrimary">@color/colorPrimary</item>
<itemname="colorPrimaryDark">@color/colorPrimaryDark</item>
<itemname="colorAccent">@color/colorAccent</item>
</style>
下边新引入一个主题隐藏掉ActionBar:
<stylename="ThemeNoActionBar"parent="Theme.AppCompat.Light.NoActionBar">
<itemname="colorPrimary">@color/colorPrimary</item>
<itemname="colorPrimaryDark">@color/colorPrimaryDark</item>
<itemname="colorAccent">@color/colorAccent</item>
</style>
对ToolBar的颜色控制是通过主题中colorPrimary、colorPrimaryDark等来控制的,具体作用的区域可以通过下图形象认识。

Android ToolBar使用详解及示例源码
3、为ToolBar添加Title、图标等
在MainActivity先获取ToolBar实例,然后通过类库提供的Api进行操作。
Android ToolBar使用详解及示例源码
toolbar=(Toolbar)findViewById(R.id.toolbar);
toolbar.setTitle("Menu");
toolbar.setSubtitle("SubMenu");
toolbar.setNavigationIcon(R.drawable.ic_dashboard_black_24dp);
setSupportActionBar(toolbar);

三、为ToolBar添加菜单
1、添加菜单资源
在menu目录下,添加menu_main.xml文件,并在文件中添加菜单项
<itemandroid:id="@+id/action_search"
android:title="Search"
android:icon="@drawable/ic_notifications_black_24dp"
app:showAsAction="ifRoom"/>
<itemandroid:id="@+id/action_notifications"
android:title="notifications"
android:icon="@drawable/ic_dashboard_black_24dp"
app:showAsAction="ifRoom"/>
<itemandroid:id="@+id/action_settings"
android:title="@string/app_name"
android:orderInCategory="100"
android:icon="@mipmap/ic_launcher"
app:showAsAction="never"/>
这里对app:showAsAction和android:showAsAction进行下说明,很多网友不知道他们的区别。app:showAsAction对于的Activity是继承自AppCompatActivity ;android:showAsAction则是继承自Activity
具体.always、never参数是指菜单在ToolBar上的位置,具体说明:
app:showAsAction
1.always:总是显示在界面上
2.never:不显示在界面上,只让出现在右边的三个点中
3.ifRoom:如果有位置才显示,不然就出现在右边的三个点中 
android:showAsAction
1.alaways:这个值会使菜单项一直显示在ActionBar上。
2.ifRoom:如果有足够的空间,这个值会使菜单显示在ActionBar上。
3.never:这个值菜单永远不会出现在ActionBar是。
4.withText:这个值使菜单和它的图标,菜单文本一起显示。

把菜单添加ToolBar里,是通过重写onCreateOptionsMenu方法来实现:
@Override
public booleanonCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

2、菜单点击事件
点击事件是在OnCreate方法中设置监听事件,代码:
toolbar.setOnMenuItemClickListener(newToolbar.OnMenuItemClickListener() {
@Override
public booleanonMenuItemClick(MenuItem item) {
switch(item.getItemId()) {
caseR.id.action_search:
Toast.makeText(MainActivity.this,"案秀云 !", Toast.LENGTH_SHORT).show();
break;
caseR.id.action_notifications:
Toast.makeText(MainActivity.this,"IT知识库 !", Toast.LENGTH_SHORT).show();
break;
caseR.id.action_settings:
Toast.makeText(MainActivity.this,"方案库 !", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
});

Android ToolBar使用详解及示例源码