ToolBar
Android 3.0 Android 推了 ActionBar。与 Actionbar 相比, Android 5.0 开始推出的一个 Material Design 风格的导航控件 Toolbar 来作为Android客户端的导航栏,Toolbar 明显要灵活的多。它不像 Actionbar 一样,一定要固定在Activity的顶部,而是可以放到界面的任意位置。
比如:
toolbar的style
首先,明确一下:
1.colorPrimaryDark :状态栏颜色,在style和Theme中设置
2.App bar color:
如果使用actionbar,则直接在style或者theme中设置colorPrimary就可以;
如果使用toolbar,则在layout中设置toolbar的background属性
<android.support.v7.widget.Toolbar
android:id="@+id/main_toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:background="@color/blue"
android:elevation="5dp">
3.navigationBarColor(导航栏底色):
Android 5 以后的版本中使用, 因此要将之设定在 res/values-v21/styles.xml 里面。
在 res/values/styles.xml中:
<style name="AppTheme" parent="Theme.AppCompat">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
在Android 5.0的style: /res/values-v21/styles.xml中:
<style name="AppTheme" parent="Theme.AppCompat">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:navigationBarColor">@color/accent_material_light</item>
</style>
toolbar设置
重点内容
- setNavigationIcon : 设置导航栏图标
- setLogo : 设置logo
- setTitle : 设置标题
- setSubtitle:设置副标题
- setOnMenuItemClickListener : 菜单按钮点击事件
Toolbar toolbar = (Toolbar) findViewById(R.id.main_toolbar);
toolbar.setNavigationIcon(R.mipmap.confirm);
toolbar.setTitle("ToolBar标题");
toolbar.setSubtitle("ToolBar副标题");
toolbar.setLogo(R.mipmap.user_checked);
setSupportActionBar(toolbar);
toolbar.setOnMenuItemClickListener(menuItemClick);
注意
setTitle方法要在setSupportActionBar()之前调用,不然没有效果;setOnMenuItemClickListener要在setSupportActionBar()之后调用;
toolbar的menu
在res/新建mune文件夹,新建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=".MainActivity">
<item
android:id="@+id/item_home"
android:icon="@mipmap/home_checked"
android:orderInCategory="80"
android:title="首页"
app:showAsAction="ifRoom" />
<item
android:id="@+id/item_discovery"
android:icon="@mipmap/discovery_checked"
android:orderInCategory="90"
android:title="发现"
app:showAsAction="collapseActionView" />
<item
android:id="@+id/item_order"
android:icon="@mipmap/order_checked"
android:orderInCategory="100"
android:title="订单"
app:showAsAction="never" />
</menu>
注意
menu中的item属性orderInCategory是表明摆放的顺序,不一定从0开始计算,但必须大于等于0,建议从0,1,2,3….这样依次给出,并且与XML行文的顺序一致。
app:showAsAction :它是作为aciton bar中的活动选项,可以指定何时或者如何显示
never: 表示不会在 ActionBar的标题栏中去显示了
ifRoom: 可以将这个选项放置在导航栏中,如果它有空间的话。
withText: 可以在导航栏中设置标题,这个标题就是通过 android:title 定义的
toolbar的menu在activity中inflate
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
toolbar menu 点击事件
private Toolbar.OnMenuItemClickListener menuItemClick = new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
String msg = "";
switch (item.getItemId()) {
case R.id.item_home:
msg = "item_home";
break;
case R.id.item_order:
msg ="item_order";
break;
case R.id.item_discovery:
msg = "item_discovery";
break;
}
ToastUtils.showToast(msg,MainActivity.this);
return true;
}
};