ToolBar详解
ToolBar是android5.0推出的一个导航控件,可以取代之前的ActionBar功能。这个控件提供的功能有:设置导航栏图标、设置App的logo、支持设置标题和子标题、支持添加一个或者多个的自定义控件、支持Action Menu
布局文件
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colortoolbar"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Clock"/>
</android.support.v7.widget.Toolbar>
如果想设置其他属性,可以通过自定义的命名空间的方式来设置,在根布局上加上下面一句话
xmlns:toolbar="http://schemas.android.com/apk/res-auto"
然后就可以直接设置NavigationIcon,Logo,Title,SubTitle等属性
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/color_0176da"
toolbar:navigationIcon="@mipmap/ic_drawer_home"
toolbar:logo="@mipmap/ic_launcher"
toolbar:subtitle="456"
toolbar:title="123">
<!--自定义控件-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Clock" />
</android.support.v7.widget.Toolbar>
代码控制
如果在布局文件中已经设置来NavigationIcon,logo,title等属性,在java代码文件中无需进行设置了,如果没有设置,可以参考下面的方式设置
setContentView(R.layout.activity_main);
setSupportActionBar(mToolBar);
//获取控件
mToolBar= (Toolbar) findViewById(R.id.toolbar);
//设置导航图标
mToolBar.setNavigationIcon(R.mipmap.ic_launcher);
//设置应用程序图标
mToolBar.setLogo(R.mipmap.ic_launcher);
//设置大标题
mToolBar.setTitle("Title");
//设置小标题
mToolBar.setSubtitle("Subtitle");
//设置菜单
mToolBar.inflateMenu(R.menu.base_toolbar_menu);
mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this,"NavigationListener",Toast.LENGTH_SHORT).show();
}
});
//设置菜单监听
mToolBar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener(){
@Override
public boolean onMenuItemClick(MenuItem item) {
int menuItemId=item.getItemId();
if(menuItemId==R.id.action_search){
Toast.makeText(MainActivity.this,"search",Toast.LENGTH_SHORT).show();
}else if(menuItemId==R.id.action_notification){
Toast.makeText(MainActivity.this,"notification",Toast.LENGTH_SHORT).show();
}else if(menuItemId==R.id.action_item1){
Toast.makeText(MainActivity.this,"item",Toast.LENGTH_SHORT).show();
}
return true;
}
});
需要注意几个地方
1.在使用ToolBar的时候需要先隐藏系统原先的导航栏
继承AppCompatActivity的类调用:
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
继承Activity的类调用:
requestWindowFeature(Window.FEATURE.NO_TITLE);
2.如果想要修改子标题和标题的大小、颜色可以调用
setTitleTextColor setTitleTextAppearance setSubtitleColor setSubtitleTextAppearance inflateMenu来设置菜单,调用setOnMenuItemOnclickListener来监听按键
3.自定义的View位于title/subtitle和actionMenu之间,所以如果title和subtitle都在,且actionMenu选项很多,那么留给自定义view的空间就更小了
当然,对于title,subtitle,navigationIcon等属性的代码方式设置,也可以通过配置文件的方式设置,前提是加入自定义的命名空间
xmlns:toolbar=”http://schemas.android.com/apk/res-auto”
这里toolbar就是自定义的名称,那么对于以上的subtitle,title等属性的设置如下
toolbar:title=”@string/title”
toolbar:subtitle=”@string/subtitle”
ActionMenu样式控制
在styles.xml文件中新建一个主题,如下
<style name="Theme.ToolBar.Base" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:textColorPrimary">@color/red</item>
<item name="android:textSize">26sp</item>
</style
然后设置Toolbar的属性popupTheme的属性
app:popupTheme="@style/Theme.ToolBar.Base"
这样就可以修改actionMenu里面的字体大小和颜色了
当然还有其他属性,如下
colorPrimaryDark
状态栏背景色,在 style 的属性中设置。
colorPrimaryDark
状态栏背景色,在 style 的属性中设置。
textColorPrimary
Actionbar 的背景色设定在 style 中的 colorPrimary, Toolbar 的背景色在layout文件中设置background属性。- colorAccent
各控制元件(如:check box、switch 或是 radoi) 被勾选 (checked) 或是选定 (selected) 的颜色。在 style 的属性中设置 colorControlNormal
各控制元件的预设颜色,在 style 的属性中设置windowBackground
App 的背景色,在 style 的属性中设- navigationBarColor
导航栏的背景色,但只能用在 API Level 21 (Android 5) 以上的版本,在 style 的属性中设置