回顧
我的《Toolbar使用》這篇文章中寫(xiě)過(guò),Toolbar有兩種使用方式
- 作為ActionBar來(lái)使用
- 作為獨(dú)立的控件來(lái)使用。
所以在Toolbar中添加菜單也有兩種方式。
添加菜單
新建菜單資源
在res下新建menu文件夾用來(lái)存放菜單資源xml。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/toolbar_search"
android:icon="@mipmap/ic_search"
android:title="搜索"
android:orderInCategory="0"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="ifRoom|collapseActionView" />
<item
android:id="@+id/toolbar_collection"
android:icon="@mipmap/ic_launcher"
android:orderInCategory="1"
android:title="收藏"
app:showAsAction="never" />
<item
android:id="@+id/toolbar_share"
android:orderInCategory="2"
android:title="分享"
app:showAsAction="never" />
<item
android:id="@+id/toolbar_fontsize"
android:orderInCategory="3"
android:title="字號(hào)"
app:showAsAction="never" />
</menu>
- 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è)操作視窗展開(kāi)。一般要配合ifRoom一起使用才會(huì)有效。
- always
Activity中添加
Toolbar作為ActionBar使用
重寫(xiě)Activity的onCreateOptionsMenu方法并實(shí)現(xiàn)相關(guān)邏輯
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
監(jiān)聽(tīng)菜單項(xiàng)的事件重寫(xiě)Activity的onOptionsItemSelected方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.toolbar_collection:
Toast.makeText(this, "收藏", Toast.LENGTH_SHORT).show();
break;
case R.id.toolbar_share:
Toast.makeText(this, "分享", Toast.LENGTH_SHORT).show();
break;
case R.id.toolbar_fontsize:
Toast.makeText(this, "字號(hào)", Toast.LENGTH_SHORT).show();
break;
case R.id.toolbar_model:
Toast.makeText(this, "模式", Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
Toolbar作為獨(dú)立控件使用
toolbar.inflateMenu(R.menu.menu_main);
監(jiān)聽(tīng)菜單項(xiàng)的事件則通過(guò)setOnMenuItemClickListener設(shè)置
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.toolbar_collection:
Toast.makeText(MainActivity.this, "收藏", Toast.LENGTH_SHORT).show();
break;
case R.id.toolbar_share:
Toast.makeText(MainActivity.this, "分享", Toast.LENGTH_SHORT).show();
break;
case R.id.toolbar_fontsize:
Toast.makeText(MainActivity.this, "字號(hào)", Toast.LENGTH_SHORT).show();
break;
case R.id.toolbar_model:
Toast.makeText(MainActivity.this, "模式", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
});
效果
菜單效果
彈出菜單樣式調(diào)整
上面效果圖會(huì)發(fā)現(xiàn)彈出的菜單是深灰色的背景,可能與當(dāng)前頁(yè)面風(fēng)格不搭,Toolbar提供了setPopupTheme方法和對(duì)應(yīng)的popupTheme屬性來(lái)設(shè)置彈出菜單樣式。
定義style樣式資源
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" >
<item name="android:textColor">@color/colorPrimary</item>
</style>
該樣式繼承于ThemeOverlay.AppCompat.Light,我修改了文本色屬性。
布局中設(shè)置
這里通過(guò)popupTheme屬性來(lái)修改樣式
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
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"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</RelativeLayout>
要注意的是popupTheme并非Android本身SDK中的屬性,而是來(lái)自于支持包,所以添加命名空間
xmlns:app="http://schemas.android.com/apk/res-auto"
效果
樣式調(diào)整效果
總結(jié)
關(guān)于Toolbar的使用以及樣式調(diào)整就暫時(shí)整理到這,還有很多細(xì)節(jié)方面還得在實(shí)際運(yùn)用中去積累。
最后貼張總的效果圖
Toolbar