最近开发用到了ToolBar和ActionBar,遇到一些坑,这里做一个简单的记录:
1.使用ToolBar替换ActionBar:
首先定义一个ToolBar布局
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
app:theme="@style/ToolbarTheme"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:minHeight="@dimen/comm_tool_bar_height"
android:title="@string/app_name"
app:layout_scrollFlags="scroll"
app:titleTextColor="@color/colorPureWhite" />
将该布局放到布局文件中设置一个id,然后在Activity中获取Toolbar,并调用
setSupportActionBar(mToolbar);
注意:如果要修改ToolBar的标题等属性,需要在setSupportActionBar(mToolbar)方法之前执行,只有在setSupportActionBar(mToolbar)方法调用之后这个修改才生效;
2. 添加菜单:
首先写一个menu xml文件:
<?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:tools="http://schemas.android.com/tools"
tools:context=".main.MainActivity">
<item
android:id="@+id/action_user"
android:icon="@drawable/btn_actionbar_user"
android:orderInCategory="1"
android:title="@string/user"
app:showAsAction="always" />
<item
android:id="@+id/action_more"
android:icon="@drawable/btn_actionbar_more"
android:orderInCategory="1"
android:title="@string/more"
app:showAsAction="always" />
</menu>
然后重写Activity的两个方法:(主要以下代码注释的内容)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//这里要使用getMenuInflateter获取Inflater,不能使用new的方法new一个Inflate实例
getMenuInflater().inflate(R.menu.***, menu);
//这里要返回true才会显示菜单
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//返回true表示消耗事件
return true;
}
3.修改menu字体大小和颜色:
给Toolbar布局添加一个
app:theme="@style/ToolbarTheme"
然后定义一个style文件:
<style name="ToolbarTheme" parent="AppTheme">
<item name="actionMenuTextColor">@color/colorPureWhite</item> <!--设置颜色-->
<item name="android:textSize">@dimen/big_txt_size</item> <!--设置字体大小-->
</style>
注意:这里有几个坑要注意,要有个parent,然后actionMenuTextColor前面不能有android前缀,但是在values-v21/styles.xml里是需要添加android前缀的