簡介
Toolbar是Android 5.0中引入的一個新控件。好比是ActionBar升級版,但是相比ActionBar,Toolbar變得更加自由,可以放到任何位置。
使用
由于我們平常開發(fā)app要兼容5.0以下的手機,所以使用Toolbar必須引用appcompat-v7兼容包,Android studio新建的工程默認是引用了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樣式設置
使用Toolbar替代ActionBar,使用的主題必須是沒有ActionBar的,否則會造成沖突。因此修改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當作ActionBar來使用。
這種情況一般發(fā)生在你想利用ActionBar現(xiàn)有的一些功能(比如能夠顯示菜單中的操作項,響應菜單點擊事件,使用ActionBarDrawerToggle等),但是又想獲得比actionbar更多的控制權限。
那么當前Activity需要繼承AppCompatActivity,調用setSupportActionBar方法傳入Toolbar的實例對象。
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當作一個獨立的控件來使用。
這種情況當前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就添加到了頁面中。

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

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

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

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