zoukankan      html  css  js  c++  java
  • 动态改变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接口即可。

  • 相关阅读:
    【项目】 技术选型 平台和语言
    WCF 常见逻辑和代码 1.错误处理和配置
    一个挺有意思的Javascript小问题
    【设计原则和建议】 方法返回值
    一次HTTP请求中的缓存
    【设计原则和建议】 方法
    【设计原则和建议】 字段
    Express全系列教程之(一):Express的安装 和第一个程序
    js switch语句祥解[范围判断]
    修改notepad++ zencodeing 插件的配置路径
  • 原文地址:https://www.cnblogs.com/alexthecoder/p/4689469.html
Copyright © 2011-2022 走看看