请选择 进入手机版 | 继续访问电脑版
  • 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

android - 在工具栏溢出菜单中显示菜单项图标时,这种奇怪的情况是如何发生的?

[复制链接]
菜鸟教程小白 发表于 2022-11-6 16:16:49 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我想在工具栏中显示一个溢出菜单(AppCompat-v7:22.1.1),下面是我的 menu_main.xml。

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item
    android:id="@+id/action_search"
    android:title="@string/action_search"
    android:icon="@mipmap/ic_menu_search"
    androidrderInCategory="100"
    android:actionViewClass="android.widget.SearchView"
    app:showAsAction="ifRoom"/>

<item
    android:id="@+id/menu_group_chat"
    android:title="@string/menu_group_chat"
    android:icon="@mipmap/ic_menu_groupchat" />

<item
    android:id="@+id/menu_add_friend"
    android:title="@string/menu_add_friend"
    android:icon="@mipmap/ic_menu_add_friend" />

运行我的应用程序后,菜单项的图标没有显示,然后我尝试了这个solution ,在我的Activty中添加一个覆盖方法onMenuOpened()(扩展自AppCompatActivity),

@Override
public boolean onMenuOpened(int featureId, 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) {
                e.printStackTrace();
            }
        }
    }
    return super.onMenuOpened(featureId, menu);
}

但是运行这个demo后,发现图标还是没有显示出来。

1. Menu with overflow button click

从此reported issue ,我知道 AppCompatActivity.onMenuOpened 在 22.x 中不再调用,但奇怪的是,当我在 Genymotion 中单击硬件菜单键时,菜单出现在底部并带有图标,

2. Menu with menu key click

关闭菜单后,我再次点击工具栏中的溢出按钮,菜单中出现这些图标,

3. Menu with overflow button click

多么奇怪啊!为什么会这样?



Best Answer-推荐答案


对于 AppCompactActivity 您可以将此检查放在 onPrepareOptionsPanel() 上。

@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(), "onMenuOpened...unable to set icons for overflow menu", e);
                }
            }
        }
    return super.onPrepareOptionsPanel(view, menu);
}

关于android - 在工具栏溢出菜单中显示菜单项图标时,这种奇怪的情况是如何发生的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30076392/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝0

帖子792059

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap