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接口即可。

  • 相关阅读:
    MFC程序自动生成dump Windbg文件
    .net 播放音频(使用winmm.dll)
    media player 网页代码属性
    标记ATL控件为安全控件
    js方法重写
    cab包inf文件配置
    凌阳单片机(61板)USB下载线原理与制作
    html 智能检查,修复
    差异性发展 浙江工商局长郑宇民“智斗”央视女主持董倩
    什么是有效高效的沟通
  • 原文地址:https://www.cnblogs.com/alexthecoder/p/4689469.html
Copyright © 2011-2022 走看看