簡(jiǎn)介
Toolbar是Android 5.0中引入的一個(gè)新控件。好比是ActionBar升級(jí)版,但是相比ActionBar,Toolbar變得更加自由,可以放到任何位置。
使用
由于我們平常開(kāi)發(fā)app要兼容5.0以下的手機(jī),所以使用Toolbar必須引用appcompat-v7兼容包,Android studio新建的工程默認(rèn)是引用了appcompat-v7。
1.布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/main_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"/>
</RelativeLayout>
2.style樣式設(shè)置
使用Toolbar替代ActionBar,使用的主題必須是沒(méi)有ActionBar的,否則會(huì)造成沖突。因此修改style.xml中主題樣式,繼承Theme.AppCompat.NoActionBar
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowBackground">@android:color/white</item>
</style>
3.Activity中使用
(1) 將Toolbar當(dāng)作ActionBar來(lái)使用。
這種情況一般發(fā)生在你想利用ActionBar現(xiàn)有的一些功能(比如能夠顯示菜單中的操作項(xiàng),響應(yīng)菜單點(diǎn)擊事件,使用ActionBarDrawerToggle等),但是又想獲得比actionbar更多的控制權(quán)限。
那么當(dāng)前Activity需要繼承AppCompatActivity,調(diào)用setSupportActionBar方法傳入Toolbar的實(shí)例對(duì)象。
public class MainActivity extends AppCompatActivity {
@BindView(R.id.main_toolbar)
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
setSupportActionBar(toolbar);
}
}
(2) 將Toolbar當(dāng)作一個(gè)獨(dú)立的控件來(lái)使用。
這種情況當(dāng)前Activity可以不繼承AppCompatActivity。
public class MainActivity extends Activity {
@BindView(R.id.main_toolbar)
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
toolbar.setTitle("Example");
}
}
以上步驟完成后,Toolbar就添加到了頁(yè)面中。

Toolbar配置
Toolbar在ActionBar原有的設(shè)計(jì)基礎(chǔ)上又將標(biāo)題欄分為了多個(gè)區(qū)域,如下從Google找到的一張示例圖所示:

大抵來(lái)說(shuō),配置常用的幾個(gè)元素就如圖中所示:
(1) setNavigationIcon
設(shè)置導(dǎo)航按鈕,比如作為返回按鈕。
在Toolbar當(dāng)作ActionBar來(lái)使用的情況下:
注意setNavigationIcon需要放在 setSupportActionBar之后才會(huì)生效。
可以使用ActionBar原有方法來(lái)添加一個(gè)系統(tǒng)的返回按鈕。
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
可以通過(guò)setNavigationOnClickListener設(shè)置其點(diǎn)擊事件。
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "toolbar", Toast.LENGTH_SHORT).show();
}
});

(2) setLogo
設(shè)置圖標(biāo)(圖中寫(xiě)錯(cuò)了,應(yīng)該是setLogo)
(3) setTitle
設(shè)置主標(biāo)題。
在Toolbar當(dāng)作ActionBar來(lái)使用的情況下:
setDisplayShowTitleEnabled需要設(shè)置為false,setTitle才能有效。
getSupportActionBar().setDisplayShowTitleEnabled(false);
(4) setSubtitle
設(shè)置副標(biāo)題
(5) setOnMenuItemClickListener
設(shè)置菜單的點(diǎn)擊事件,如果Toolbar當(dāng)作ActionBar來(lái)使用的話,還可以直接在onOptionsItemSelected(MenuItem item)中設(shè)置。
測(cè)試代碼如下:
toolbar.setNavigationIcon(R.mipmap.icon_back);
toolbar.setLogo(R.mipmap.ic_launcher);
toolbar.setTitle("Toolbar");
toolbar.setSubtitle("subtitle");

總結(jié)
關(guān)于Toolbar的初步使用就這么多,在Toolbar當(dāng)作ActionBar使用的情況下,能用ActionBar原有方法實(shí)現(xiàn)的功能盡量用其方法實(shí)現(xiàn),不能實(shí)現(xiàn)的再考慮使用Toolbar的方法,舉個(gè)例子,像菜單構(gòu)建設(shè)置監(jiān)聽(tīng)什么的,直接使用Activity提供的方法就好了。