簡介
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樣式設(shè)置
使用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當(dāng)作ActionBar來使用鲸伴。
這種情況一般發(fā)生在你想利用ActionBar現(xiàn)有的一些功能(比如能夠顯示菜單中的操作項堪藐,響應(yīng)菜單點擊事件,使用ActionBarDrawerToggle等)挑围,但是又想獲得比actionbar更多的控制權(quán)限礁竞。
那么當(dāng)前Activity需要繼承AppCompatActivity,調(diào)用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當(dāng)作一個獨立的控件來使用模捂。
這種情況當(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就添加到了頁面中狂男。
Toolbar配置
Toolbar在ActionBar原有的設(shè)計基礎(chǔ)上又將標(biāo)題欄分為了多個區(qū)域综看,如下從Google找到的一張示例圖所示:
大抵來說,配置常用的幾個元素就如圖中所示:
(1) setNavigationIcon
設(shè)置導(dǎo)航按鈕岖食,比如作為返回按鈕红碑。
在Toolbar當(dāng)作ActionBar來使用的情況下:
注意setNavigationIcon需要放在 setSupportActionBar之后才會生效。
可以使用ActionBar原有方法來添加一個系統(tǒng)的返回按鈕泡垃。
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
可以通過setNavigationOnClickListener設(shè)置其點擊事件析珊。
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)(圖中寫錯了,應(yīng)該是setLogo)
(3) setTitle
設(shè)置主標(biāo)題蔑穴。
在Toolbar當(dāng)作ActionBar來使用的情況下:
setDisplayShowTitleEnabled需要設(shè)置為false忠寻,setTitle才能有效。
getSupportActionBar().setDisplayShowTitleEnabled(false);
(4) setSubtitle
設(shè)置副標(biāo)題
(5) setOnMenuItemClickListener
設(shè)置菜單的點擊事件存和,如果Toolbar當(dāng)作ActionBar來使用的話奕剃,還可以直接在onOptionsItemSelected(MenuItem item)中設(shè)置。
測試代碼如下:
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原有方法實現(xiàn)的功能盡量用其方法實現(xiàn),不能實現(xiàn)的再考慮使用Toolbar的方法茄袖,舉個例子倡蝙,像菜單構(gòu)建設(shè)置監(jiān)聽什么的,直接使用Activity提供的方法就好了绞佩。