Android ToolBar使用详解及示例源码

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


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



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


3、为ToolBar添加Title、图标等
在MainActivity先获取ToolBar实例,然后通过类库提供的Api进行操作。

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文件,并在文件中添加菜单项
< item android :id= "@+id/action_search"
android :title= "Search"
android :icon= "@drawable/ic_notifications_black_24dp"
app :showAsAction= "ifRoom" />
< item android :id= "@+id/action_notifications"
android :title= "notifications"
android :icon= "@drawable/ic_dashboard_black_24dp"
app :showAsAction= "ifRoom" />
< item android :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 boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu. menu_main , menu);
return true ;
}

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凡梦_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值