#######Android Toolbar 使用詳解
在Android APi版本21前設(shè)置導(dǎo)航欄都是使用ActionBar,但是為了推廣Material Design 風(fēng)格,谷歌在 Android版本21后推出ToolBar來替換它,在版本21后可以直接使用,21下可以導(dǎo)入android.support.v7.widget.Toolbar來兼容。相對(duì)于ActionBar ,ToolBar在功能上沒有太多變化,但是比它可以在布局里放在任何位置可以更靈活的和其它控件配合實(shí)現(xiàn)對(duì)應(yīng)的效果例如DrawerLayout等,這篇文章不做詳細(xì)說明,接下來看下ToolBar的實(shí)際使用。
Toolbar常用的功能根據(jù)API介紹有主要有如下幾種:
1. 設(shè)置導(dǎo)航欄圖標(biāo);
2. 設(shè)置App的logo;
3. 設(shè)置標(biāo)題
4. 支持ActionMenu
5. 可以添加自定義控件
由于ActionBar和其功能重合,所以一般使用ToolBar都會(huì)將ActionBar去掉。而去掉Actionbar有兩種方法:
1.在activity的style中設(shè)置
<style name="Theme.AppCompat.Light.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
這個(gè)來去掉
2.在代碼中設(shè)置如
如果繼承的是Activity就調(diào)用
supportRequestWindowFeature(Window.FEATURE_NO_TITLE) ;
如果繼承是AppCompatActivity
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
接下來看下ToolBar常用的幾個(gè)方法
//設(shè)置導(dǎo)航欄圖標(biāo)
mToolbar.setNavigationIcon(R.drawable.tile);
//設(shè)置app logo
mToolbar.setLogo(R.drawable.ic_launcher);
//設(shè)置主標(biāo)題
mToolbar.setTitle("Title");
//設(shè)置子標(biāo)題
mToolbar.setSubtitle("Subtitle");
//設(shè)置主標(biāo)題顏色
mToolbar.setTitleTextColor(getResources().getColor(android.R.color.white));
//設(shè)置title style,包括文字顏色,文字大小
mToolbar.setTitleTextAppearance(this, R.style.toolbar);
//設(shè)置Subtitle color
mToolbar.setSubtitleTextColor(getResources().getColor(android.R.color.black));
//設(shè)置Subtitle style
mToolbar.setSubtitleTextAppearance(this, R.style.toolbar);
//此方法是設(shè)置導(dǎo)航圖標(biāo)的點(diǎn)擊事件
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
效果如下:
//設(shè)置右上角的填充菜單 此處menu直接顯示在ToolBaritem數(shù)量有限制,一般不超過3個(gè)多余的都以popview方式顯示
mToolbar.inflateMenu(R.menu.main);
//設(shè)置菜單的點(diǎn)擊事件
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
return true;
}
});
menu 文件
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<item android:id="@+id/menu_scan"
android:title="呵呵"
android:icon="@drawable/ic_search"
app:showAsAction="ifRoom"/>
<item android:id="@+id/menu_stop"
android:title="@string/menu_stop"
app:showAsAction="ifRoom"/>
<item android:id="@+id/menu_stop1"
android:title="@string/menu_stop"
app:showAsAction="ifRoom"/>
<item android:id="@+id/menu_stop2"
android:title="@string/menu_stop"
app:showAsAction="ifRoom"/>
<item android:id="@+id/menu_stop3"
android:title="@string/menu_stop"
app:showAsAction="never"/>
</menu>
以上就是toolbar的基本用法,但是實(shí)際開發(fā)中肯定會(huì)遇到各種布局要求,所以toolbar也是支持添加多個(gè)自定義控件的。但是自定義的View位于 Logo和 menu 之間,如果ToolBar的所有屬性都調(diào)用了而有使用了menu此時(shí)自定義view控件位置就比較少。而添加自定義控件方法如下:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
app:title=""
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
</android.support.v7.widget.Toolbar>
就是和一般線性布局一樣在里面添加控件就ok
注:如果設(shè)置title,而添加的自定義控件過長,此時(shí)title會(huì)不顯示,logo和menu等還是正常顯示。
而我們?cè)趯?shí)際開發(fā)中,導(dǎo)航欄樣式會(huì)要很多變化,這個(gè)時(shí)候可以運(yùn)用到 theme來去改變。
ToolBar 有兩個(gè)樣式一個(gè)是popupTheme(這個(gè)是設(shè)置彈出菜單的樣式) ,一個(gè)是theme設(shè)置toolbar本身
樣式的
下面的一個(gè)圖就是對(duì)應(yīng)一些樣式的值,其中大部分的屬性更改在api 21后才有效
popuptheme style如下
//彈出菜單的樣式
<style name="AppBaseToolBaPoprTheme">
<item name="android:textSize">10sp</item>//設(shè)置文字大小
<item name="android:textColor">@color/font_blue</item>//設(shè)置字體色顏色
<item name="android:background">@color/font_white</item>//設(shè)置背景顏色
</style>
效果如下
ToolBar theme 可以如下設(shè)置:
<item name="android:textColorPrimary">@color/font_red</item>//設(shè)置Toolbar的title顏色
<item name="actionMenuTextColor">@color/font_blue</item> //設(shè)置顯示在Toolbar上menu字體顏色
<item name="android:background">@color/font_red</item>//設(shè)置Toolbar背景顏色
<item name="android:textSize">30sp</item>//設(shè)置顯示在Toolbar上menu字體大小
另外如果是要更改默認(rèn)菜單那個(gè)三個(gè)點(diǎn)的圖標(biāo)可以通過一下方式
<style name="AppBaseToolBarTheme" parent="Theme.AppCompat.Light">
<!-- customize the color palette -->
<item name="colorPrimary">@color/font_red</item>//ActionBar的背景顏色
<item name="colorPrimaryDark">@color/font_red</item>//狀態(tài)欄的背景顏色 21上才行
<item name="colorAccent">@color/font_blue</item>
<item name="android:textColorPrimary">@color/font_red</item> //title的顏色
<item name="actionMenuTextColor">@color/font_blue</item>
<item name="android:background">@color/font_white</item>//toolbar背景顏色
<item name="actionOverflowButtonStyle">@style/MenuButton.Overflow</item>//三個(gè)點(diǎn)按鈕的樣式
</style>
<style name="MenuButton.Overflow" parent="android:style/Widget.Holo.Light.ActionButton.Overflow">
<item name="android:src">@drawable/ic_search</item>
</style>
然后在Toolbar Theme中引入AppBaseToolBarTheme該樣式就可以
以上就是我了解Tolbar的基本用法,后面會(huì)寫和其它控件搭配的用法
另外說一個(gè)坑。
Toolbar 如果在APi23引入的如果在xml使用的是v7包的化在引入對(duì)應(yīng)的屬性的時(shí)候必須引入命名空間
xmlns:app="http://schemas.android.com/apk/res-auto"
并且所有屬性都要用這種,否則對(duì)應(yīng)的屬性無效,如果直接用的23以上APi可以不用這樣
app:title=""
app:popupTheme="@style/AppBaseToolBaPoprTheme"
app:theme="@style/AppBaseToolBarTheme"
在使用menu文件一樣存在,都必須引入以上的。