码迷,mamicode.com
首页 > 其他好文 > 详细

动态改变ToolBar中的MenuItem

时间:2015-07-30 16:44:34      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

最近项目中开始使用到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接口即可。

动态改变ToolBar中的MenuItem

标签:

原文地址:http://www.cnblogs.com/alexthecoder/p/4689469.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!