menu item icon in toolbar overflow menu

简介: stackoverflow解决overflow menu的几个Item都不显示icon 贴一部分menu<item android:id="@+id/action_zone" android:title="@string/zone" android:orderInCategory="90" andro

stackoverflow解决


这就是问题所在


overflow menu的几个Item都不显示icon
贴一部分menu

<item android:id="@+id/action_zone"
        android:title="@string/zone"
        android:orderInCategory="90"
        android:icon="@mipmap/biz_forum_author_icon"
        app:showAsAction="always" />

    <item
        android:id="@+id/action_share"
        android:orderInCategory="90"
        android:title="action_share"

        app:showAsAction="always"/>

    <item android:id="@+id/action_weather"
        android:title="人之初"
        android:orderInCategory="100"
        android:icon="@mipmap/biz_main_menu_weather"
        app:showAsAction="never"/>
    <item android:id="@+id/action_offline"
        android:title="性本善"
        android:orderInCategory="100"
        android:icon="@mipmap/biz_main_menu_offline"
        app:showAsAction="never"/>

可以看到,每个Item都添加了icon
android:icon=”@mipmap/biz_main_menu_offline”
然而都不显示

解决方案

1.这个方案虽然没有解决我的问题,依旧不显示,但是解决了其他人的问题

/**
     * 利用反射让隐藏在Overflow中的MenuItem显示Icon图标
     * @param featureId
     * @param menu
     * onMenuOpened方法中调用
     */
    public static void setOverflowIconVisible(int featureId, Menu menu) {
        if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {
            if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
                try {
                 Method m = menu.getClass().
                 getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
                    m.setAccessible(true);
                    m.invoke(menu, true);
                } catch (Exception e) {
                }
            }
        }
    }

然后在这里调用即可

//显示溢出图标
    @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
        setOverflowIconVisible( featureId,  menu);
        return super.onMenuOpened(featureId, menu);
    }

2.后来尝试的一些方案就不说了,直接上可用的方案(解决我问题的)

//解决ICON不显示
    @Override
    protected boolean onPrepareOptionsPanel(View view, Menu menu) {
        if (menu != null) {
            if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
                try {
                    Method m = menu.getClass().getDeclaredMethod(
                            "setOptionalIconsVisible", Boolean.TYPE);
                    m.setAccessible(true);
                    m.invoke(menu, true);
                } catch (Exception e) {
                    Log.e(getClass().getSimpleName(), 
                    "unable to set icons for overflow menu", e);
                }
            }
        }
        return super.onPrepareOptionsPanel(view, menu);
    }

终于解决了

相关文章
|
Android开发
Android studio 出现Plugin [id: ‘com.android.application‘, version: ‘8.1.0‘, apply: false] 问题解决办法
Android studio 出现Plugin [id: ‘com.android.application‘, version: ‘8.1.0‘, apply: false] 问题解决办法
5508 2
|
JavaScript 小程序 Shell
🤒如果老板搞代码量统计,打工人如何自救?
“一个下午做出一个微信小程序”,“一个下午搞定业务方案”,每天写1000行代码的成绩,大家你们真的做得到吗?
495 0
🤒如果老板搞代码量统计,打工人如何自救?
|
前端开发 JavaScript 算法
面试官:【webpack和vite的区别?vite一定比webpack快吗?vite的缺点是什么?webpack的热更新和vite的热更新区别?】
面试官:【webpack和vite的区别?vite一定比webpack快吗?vite的缺点是什么?webpack的热更新和vite的热更新区别?】
3716 1
|
消息中间件 Docker 容器
Docker安装ActiveMQ
Docker安装ActiveMQ步骤
8618 0
|
XML 编解码 Android开发
Android 设置Padding和Margin(动态/静态)
在Android界面开发时,为了布局更加合理好看,很多时候会用上Padding和Margin, padding和margin是什么呢?即内边距和外边距; 某个View指定为padding是针对该View里面的子View距离该View距离而言的,或者是里面的内容距离容器的距离。
|
存储 SQL Prometheus
统一观测丨如何使用 Prometheus 监控 MySQL
数据库的瓶颈往往也是整个系统的瓶颈,其重要性不言而喻,所以对于 MySQL 的监控必不可少,及时发现 MySQL 运行中的异常,可以有效提高系统的可用性和用户体验。因此,观测 MySQL 关键指标,实时关注数据库的可用性与性能,成为运维团队的重要任务。
统一观测丨如何使用 Prometheus 监控 MySQL
|
SQL 分布式计算 Hadoop
大数据基本开发工具的SSH终端的SecureCRT
在大数据开发中,使用SSH终端是非常必要的,因为它提供了一个安全的远程访问方式。SecureCRT是一个功能丰富的SSH终端,它支持多种协议,并且可以在多个平台上运行。本文将会介绍如何在SecureCRT中配置和使用基本的大数据开发工具。
217 0
|
架构师 量子技术 芯片
433个量子比特!IBM发布最大超导量子计算机,比特数量超谷歌7倍
433个量子比特!IBM发布最大超导量子计算机,比特数量超谷歌7倍
512 0
|
弹性计算 安全 数据安全/隐私保护
安装 Putty 工具远程连接 ECS 服务器 | 学习笔记
快速学习 安装 Putty 工具远程连接 ECS 服务器
329 0
安装 Putty 工具远程连接 ECS 服务器 | 学习笔记
|
存储 新零售 运维
易仓科技×OceanBase:打造跨境行业全生态链的新零售SaaS
易仓科技×OceanBase:打造跨境行业全生态链的新零售SaaS
403 0
易仓科技×OceanBase:打造跨境行业全生态链的新零售SaaS