動態改變ToolBar中的MenuItem


最近項目中開始使用到ToolBar控件,其中有需求需要動態改變ToolBar中的MenuItem。如下圖:

1、首先想到的辦法是利用ToolBar自帶的方法addView()removeView().

經測試,動態添加和刪除view沒有點擊效果,需要自己添加,而且如果需要overflow效果,則需要自己實現PopupMenu,所以此方法適用於view比較少的情況。

2、ToolBar是用來替換ActionBar的,用過ActionBar的人應該都熟悉ActionMenuView,使用ActionMenuView配合ToolBar則可以實現動態改變ToolBar中的MenuItem,實際上改變的是ActionMenuView中的item。

1)、在布局文件中把ActionMenuView當作ToolBar的child;

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/ToolBar">

    <android.support.v7.widget.ActionMenuView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/action_menu_view"
        android:layout_gravity="right"/>

</android.support.v7.widget.Toolbar>

其中style/ToolBar如下:

<style name="ToolBar">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:id">@id/toolbar</item>
        <item name="android:background">@color/myPrimaryColor</item>
        <item name="theme">@style/ToolBarTheme</item>
        <!--貌似無效 -->
        <item name="popupTheme">@style/ToolBarPopupTheme</item>
    </style>

    <style name="ToolBarTheme" parent="ThemeOverlay.AppCompat.Light">
        <item name="android:textColorPrimary">@color/abc_primary_text_material_dark</item>
        <item name="android:textColorSecondary">@color/abc_primary_text_material_dark</item>
        <item name="android:colorBackground">@color/myPrimaryColor</item>
    </style>

    <style name="ToolBarPopupTheme" parent="ThemeOverlay.AppCompat.Light">
        <item name="android:textColorPrimary">@color/abc_primary_text_material_light</item>
        <item name="android:textColorSecondary">@color/abc_primary_text_material_light</item>
        <item name="android:colorBackground">@color/myPrimaryColor</item>
    </style>

2)、在代碼中,首先在Activity的onCreate()中findview,然后在需要的地方添加MenuItem,和Menu的使用方法一樣;

actionMenuView = (ActionMenuView) findViewById(R.id.action_menu_view);
//設置MenuItem點擊事件
actionMenuView.setOnMenuItemClickListener(this);

......

//清除之前的MenuItem
actionMenuView.getMenu().clear();
//添加新的MenuItem
getMenuInflater().inflate(R.menu.xxx,actionMenuView.getMenu());

效果圖如下:

3)、點擊事件相應:實現ActionMenuView.OnMenuItemClickListener接口即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM