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

  • 相关阅读:
    HBase启动遇到Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0警告
    hadoop伪分布式安装之Linux环境准备
    个人作业收官——软件工程实践总结
    K米测试
    K米评测
    第三次作业-结对编程
    关于第二次作业的改进之处
    第二次作业——结对项目之需求分析与原型设计
    调研《构建之法》指导下的全国高校的历届软工实践作品
    PSP总结报告
  • 原文地址:https://www.cnblogs.com/alexthecoder/p/4689469.html
Copyright © 2011-2022 走看看