(1)簡介
Toolbar 是 Android 5.0 推出的一個(gè) Material Design 風(fēng)格的導(dǎo)航控件 ,用來取代之前的 Actionbar 。與 Actionbar 相比,Toolbar 明顯要靈活的多。它不像 Actionbar 一樣,一定要固定在Activity的頂部,而是可以放到界面的任意位置。
(2)修改主題
當(dāng)我們新建一個(gè)工程時(shí),我們發(fā)現(xiàn)默認(rèn)是有導(dǎo)航欄的, 如圖:

那是因?yàn)槟J(rèn)app主題自帶了導(dǎo)航欄


我們發(fā)現(xiàn),系統(tǒng)自帶的是一個(gè)actionBar,那么我們就換一個(gè)主題

三種主題任意選擇一個(gè)即可。
現(xiàn)在開始添加一個(gè)ToolBar。
(3)Toolbar導(dǎo)包選擇

如圖所示,Toolbar有兩種導(dǎo)包,建議使用v7的那個(gè),因?yàn)榈诙N只支持Android5.0以上的手機(jī)。
(4)Toolbar基本代碼
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_normal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:collapseIcon="@mipmap/ic_launcher"
app:buttonGravity="bottom"
app:navigationIcon="@mipmap/ic_launcher"
app:popupTheme="@style/Animation.AppCompat.Dialog"
app:logoDescription="asdasdasd"
app:maxButtonHeight="50dp"
app:navigationContentDescription="tttttt"
app:title="Title"
app:titleTextColor="#ffffff"
android:background="@color/colorPrimaryDark"
app:subtitle="SubTitle"
app:subtitleTextColor="#ffffff"
app:logo="@mipmap/ic_launcher">
</android.support.v7.widget.Toolbar>
(5)基本屬性
- background 設(shè)置背景色
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_normal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark">
</android.support.v7.widget.Toolbar>

目前發(fā)現(xiàn),設(shè)置toolbar背景色之后,狀態(tài)欄也會(huì)隨之變化。
- navigationIcon 添加返回按鈕
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_normal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark"
app:navigationIcon="@mipmap/back">
</android.support.v7.widget.Toolbar>

- logo 添加logo
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_normal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark"
app:navigationIcon="@mipmap/back"
app:logo="@mipmap/ic_launcher">
</android.support.v7.widget.Toolbar>

- title和subtitle 添加標(biāo)題和子標(biāo)題
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_normal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark"
app:navigationIcon="@mipmap/back"
app:logo="@mipmap/ic_launcher"
app:title="ToolBar標(biāo)題"
app:subtitle="ToolBar子標(biāo)題">
</android.support.v7.widget.Toolbar>

- titleTextColor和subtitleTextColor 修改標(biāo)題和子標(biāo)題的顏色
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_normal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark"
app:navigationIcon="@mipmap/back"
app:logo="@mipmap/ic_launcher"
app:title="ToolBar標(biāo)題"
app:subtitle="ToolBar子標(biāo)題"
app:titleTextColor="#ffffff"
app:subtitleTextColor="#ffffff">
</android.support.v7.widget.Toolbar>

- collapseIcon 設(shè)置折疊視圖的圖標(biāo)
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_normal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark"
app:navigationIcon="@mipmap/back"
app:logo="@mipmap/ic_launcher"
app:title="ToolBar標(biāo)題"
app:collapseIcon="@mipmap/back"
app:subtitle="ToolBar子標(biāo)題"
app:titleTextColor="#ffffff"
app:subtitleTextColor="#ffffff">

這個(gè)后面有詳細(xì)介紹。
(6)添加菜單
通過inflateMenu可以添加toolbar的菜單
toolbar_normal.inflateMenu(R.menu.toolbar_menu);
菜單布局是
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
android:icon="@mipmap/back"
android:title="按鈕1"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_notification"
android:icon="@mipmap/back"
android:title="按鈕2"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_item_one"
android:title="按鈕3"
app:showAsAction="never" />
<item
android:id="@+id/action_item_two"
android:title="按鈕4"
app:showAsAction="never" />
</menu>
效果如下:


每個(gè)菜單都可以設(shè)置特有的屬性
- orderInCategory
設(shè)置菜單項(xiàng)的排列順序,必須設(shè)置大于等于0的整數(shù)值。數(shù)值小的排列在前,如果值相等,則按照xml中的順序展現(xiàn)。 - title
菜單項(xiàng)的標(biāo)題。 - icon
菜單項(xiàng)的圖標(biāo)。 - showAsAction
該屬性有五個(gè)值,可以混合使用。
always:總是顯示在Toolbar上。
ifRoom:如果Toolbar上還有空間,則顯示,否則會(huì)隱藏在溢出列表中。
never:永遠(yuǎn)不會(huì)顯示在Toolbar上,只會(huì)在溢出列表中出現(xiàn)。
withText:文字和圖標(biāo)一起顯示。
collapseActionView:聲明了這個(gè)操作視窗應(yīng)該被折疊到一個(gè)按鈕中,當(dāng)用戶選擇這個(gè)按鈕時(shí),這個(gè)操作視窗展開。一般要配合ifRoom一起使用才會(huì)有效。
這里重點(diǎn)介紹一下collapseActionView屬性,利用collapseActionView屬性實(shí)現(xiàn)“點(diǎn)擊按鈕展開成搜索框”
第一步:設(shè)置折疊視圖圖標(biāo)

第二步:修改菜單屬性

這樣的話就可以實(shí)現(xiàn)下圖的效果

(7)setOnMenuItemClickListener
設(shè)置Item的點(diǎn)擊事件
toolbar_normal.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.action_item_one:
break;
case R.id.action_item_two:
break;
case R.id.action_notification:
break;
case R.id.action_search:
break;
}
return true;
}
});
(8)setNavigationOnClickListener
設(shè)置返回鍵點(diǎn)擊事件
toolbar_normal.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
(9)SearchView
有關(guān)SearchView,前面已經(jīng)介紹過怎么展示了,下面介紹怎么去設(shè)置監(jiān)聽
SearchView searchView = (SearchView) menuItem.getActionView();
searchView.setQueryHint("搜索");
//((ImageView)searchView.findViewById(R.id.search_button)).setImageResource(R.mipmap.shennvguo2);
searchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//當(dāng)點(diǎn)擊搜索編輯框的時(shí)候執(zhí)行,剛進(jìn)入時(shí)默認(rèn)點(diǎn)擊搜索編輯框
}
});
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
//點(diǎn)擊軟鍵盤搜索的時(shí)候執(zhí)行
return false;
}
@Override
public boolean onQueryTextChange(String s) {
//搜索框文本發(fā)生改變的時(shí)候執(zhí)行
return false;
}
});
searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
//當(dāng)?shù)玫浇裹c(diǎn)和失去焦點(diǎn)的時(shí)候執(zhí)行
}
});
menuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
//展開時(shí)回調(diào)
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
//收起來時(shí)回調(diào)
return true;
}
});
(10)Overflow
修改overflow的圖標(biāo)
//設(shè)置overflow圖標(biāo)
toolbar_normal.setOverflowIcon(ContextCompat.getDrawable(this,R.mipmap.overflow));

(11)overflow popup主題

溢出菜單就不介紹了,目前沒有什么好辦法可以自定義布局。

(12)添加子布局

Toolbar的父類是ViewGroup,我們常用的線性布局和相對(duì)布局的父類也是ViewGroup,所以Toolbar也同樣可以添加子布局,看以下代碼
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_normal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark"
app:navigationIcon="@mipmap/back"
app:popupTheme="@style/OverflowMenuStyle"
app:collapseIcon="@mipmap/back">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/colorAccent"
android:text="標(biāo)題"
android:layout_gravity="center"
android:textSize="20sp"/>
</android.support.v7.widget.Toolbar>
我們添加一個(gè)標(biāo)題,使它居中

[本章完...]