项目中要使用到ToolBar,所以把用到的知识总结一下:
1.首先要在styles.xml中设置noActionBar
<!-- 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>
<style name="AppTheme.Base" parent="Theme.AppCompat">
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item
</style>
2.在布局中添加v7包下的ToolBar,通常做法是额外写一个布局,利用include:layout的方法添加到自己的布局中,因为ToolBar会在一个项目中多次用到:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/id_toolBar"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:fitsSystemWindows="true">
</android.support.v7.widget.Toolbar>
其中android:fitsSystemWindows="true"
作用是避免ToolBar和系统状态栏发生重合。
3.在Activity中的引用与设置相关属性
a.先加载menu布局
/** * 为toolBar设置menu
* @param menu
* @return
*/@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar_item,menu);
return super.onCreateOptionsMenu(menu);
}
b.在代码中初始化ToolBar
Toolbar toolbar = (Toolbar)findViewById(R.id.id_toolBar);
setSupportActionBar(toolbar);
其中setSupportActionBar(toolbar);
这句代码就是用ToolBar代替ActionBar
c.为ToolBar的menu item设置点击事件
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener()
{ @Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.toolbar_add:
break;
}
return false;
}
});
其中case 中的id为menu.xml中设置的id
3.到这里一个基本的ToolBar就已经加载到app中了,当然还有一些比较常用的属性来美化ToolBar:(注意,前提是已经写了setSupportActionBar(toolbar);
这句代码,不然会无效果)。
toolbar.setTitle("主标题");//设置主标题
toolbar.setSubtitle("副标题");//设置副标题
toolbar.setLogo(R.drawable.ic_launcher);//设置LOGO
4.为ToolBar主标题左边添加一个icon,并添加点击事件
toolbar.setNavigationIcon(R.drawable.click_menu);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
5.当然还有一个最重要的知识点我觉得就是可以动态改变menu的item,下面上代码:
/** * 重写该方法在不同页面可以刷新不同的menu_item
* 要手动调用invalidateOptionsMenu()方法去刷新
* @param menu
* @return
*/@Override
public boolean onPrepareOptionsMenu(Menu menu) {
switch (type){
case Contraint.DISTRIBUTOR_TYPE:
menu.findItem(R.id.toolbar_add).setVisible(true);
break;
case Contraint.ANIMAL_TOTAL_TYPE:
menu.findItem(R.id.toolbar_add).setVisible(true);
break;
case Contraint.QUALITY_STATICS_TOTAL_TYPE:
menu.findItem(R.id.toolbar_add).setVisible(true);
break;
case Contraint.DEAD_STATICS_TOTAL_TYPE:
menu.findItem(R.id.toolbar_add).setVisible(false);
break;
}
return super.onPrepareOptionsMenu(menu);
}
当然,这里只是重写了各种情况下item的显示状态,还要在自己更改各种情况的时候手动调用invalidateOptionsMenu()去刷新menu item的显示。