Toolbar中添加菜單

回顧

我的《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ì)有效。

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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容