什么是ToolBar:
Android在3.0以后退出了一个控件ActionBar,而到了2013年,Google开始大力的推动所谓的Android Style,
想要改善过去Android纷乱的界面,希望使用者尽可能在Android手机上有着独特的操作体验.ActionBar过去使用最多的就是ActionBarSherlock和support v7包下的Appcompat.
(新的版本都添加了新的元素,控件,内容,在低一版本的Android系统,就没有这些东西,如果没有V兼容包,那么你用新版本Android写的东西,在低一版本运行,就找不到一些方法,从而导致程序崩溃.
为了解决这个问题,开发了V兼容包)
Android5.0以下的设备,目前colorPrimaryDark无法去个性化状态栏的颜色
ActionBar:在使用时有一堆问题,文字不能定制,位置不能改变,图标间距无法控制.
升级版:ToolBar, 是Google官方提供,以便满足开发者个性化定制状态栏需求. 并且提供了support library 向下兼容包
特点:ToolBar实际是一个容器ViewGroup,一个容器,我们可以直接往里面塞东西,简单粗暴.
使用ToolBar的基本步骤 1.隐藏原本的ActionBar,通过修改我们的基础主题为:@style/Theme.AppCompat.Light.NoActionBar (改主题在清单文件里进行修改.你可以改变某个Activity的主题,也可以直接改变应用的主题,应用主题改变为application)
打开Values文件夹中的Style,将里面的parent做出更改
<!-- Base application theme. -->
< style name= "AppTheme" parent= "Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
< item name= "colorPrimary">@color/colorPrimary</ item>
< item name= "colorPrimaryDark">@color/colorPrimaryDark</ item>
< item name= "colorAccent">@color/colorAccent</ item>
< style name= "AppTheme" parent= "Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
< item name= "colorPrimary">@color/colorPrimary</ item>
< item name= "colorPrimaryDark">@color/colorPrimaryDark</ item>
< item name= "colorAccent">@color/colorAccent</ item>
</style>
<!--设置ToolBar的背景颜色,可以把ToolBar直接当容器使用--> <android.support.v7.widget.Toolbar android:id="@+id/toolBar" android:background="#41f4eb" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:text="はつね!" android:textSize="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </android.support.v7.widget.Toolbar>
3.代码中初始化ToolBar
4.对ToolBar做个性化设置
Toolbar toolbar = (Toolbar) findViewById(R.id.
toolBar);
// 设置 ToolBar 的主标题 , 必须要在 setSupportActionBar 代码执行顺序的前面
toolbar.setTitle( " 主标题 ");
// 必须有的一步操作 , 参数就是 ToolBar 对象
setSupportActionBar(toolbar);
// 设置导航栏图标
// toolbar.setNavigationIcon(R.drawable.a4);
// 设置 App 的 Logo
toolbar.setLogo(R.drawable. a4);
// 设置子标题 , 会出现在主标题的正下方
// 设置 ToolBar 的主标题 , 必须要在 setSupportActionBar 代码执行顺序的前面
toolbar.setTitle( " 主标题 ");
// 必须有的一步操作 , 参数就是 ToolBar 对象
setSupportActionBar(toolbar);
// 设置导航栏图标
// toolbar.setNavigationIcon(R.drawable.a4);
// 设置 App 的 Logo
toolbar.setLogo(R.drawable. a4);
// 设置子标题 , 会出现在主标题的正下方
toolbar.setSubtitle("子标题");
<?
xml version=
"1.0"
encoding=
"utf-8"
?>
< menu xmlns: android = "http://schemas.android.com/apk/res/android"
xmlns: app = "http://schemas.android.com/apk/res-auto">
<!-- 注意 :xmlns:app=.../res-auto 是要修改的地方 , 下面要引用 app-->
<!-- app:showAsAction= 对 item 是否隐藏折叠的设置 , 隐藏折叠显示文本 , 否则显示图片
always 就是一直显示 ,never 就是隐藏折叠 -->
< item android :id= "@+id/item0"
app :showAsAction= "never"
android :icon= "@drawable/a4"
android :title= "item0"
/>
< item android :id= "@+id/item1"
app :showAsAction= "never"
android :icon= "@drawable/a4"
android :title= "item1"
/>
< item android :id= "@+id/item2"
app :showAsAction= "never"
android :icon= "@drawable/a4"
android :title= "item2"
/>
< menu xmlns: android = "http://schemas.android.com/apk/res/android"
xmlns: app = "http://schemas.android.com/apk/res-auto">
<!-- 注意 :xmlns:app=.../res-auto 是要修改的地方 , 下面要引用 app-->
<!-- app:showAsAction= 对 item 是否隐藏折叠的设置 , 隐藏折叠显示文本 , 否则显示图片
always 就是一直显示 ,never 就是隐藏折叠 -->
< item android :id= "@+id/item0"
app :showAsAction= "never"
android :icon= "@drawable/a4"
android :title= "item0"
/>
< item android :id= "@+id/item1"
app :showAsAction= "never"
android :icon= "@drawable/a4"
android :title= "item1"
/>
< item android :id= "@+id/item2"
app :showAsAction= "never"
android :icon= "@drawable/a4"
android :title= "item2"
/>
</menu>
//
往
toolBar
填充菜单布局
,
起效果必须复写
onCreateOptionsMenu
方法
toolbar.inflateMenu(R.menu. toolbar_menu);
// 设置右上角的菜单点击事件的监听
toolbar.setOnMenuItemClickListener( new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Toast. makeText(MainActivity. this, "hatsune39", Toast. LENGTH_SHORT).show();
return true;
}
toolbar.inflateMenu(R.menu. toolbar_menu);
// 设置右上角的菜单点击事件的监听
toolbar.setOnMenuItemClickListener( new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Toast. makeText(MainActivity. this, "hatsune39", Toast. LENGTH_SHORT).show();
return true;
}
});
//
使用
getMenuInflater()
填充
Menu
布局
,
第二个参数固定式
menu,
更改返回值为
True,
才有效果
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu. toolbar_menu,menu);
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu. toolbar_menu,menu);
return true;
}
![]()
效果图
![]()