Android 4.4.2上未显示可绘制图标

3
我在Play商店上有一个Android应用程序(Raleigh Nights),最近有人向我反映称我的溢出按钮中的可绘制图标不显示,尽管文本正常显示。 一切在4.3上都正常显示,但我不知道可能会导致差异。 当我使用模拟器进行调试时,它似乎设置了MenuItem图标并且没有抛出任何异常。 我已经花费数小时来尝试找出问题所在,但一无所获。再次提醒,它在旧版本中可以工作,但在4.4.2(KitKat)中不显示图标。 它还在一些4.4.2手机上崩溃,尽管我无法使其在模拟器上崩溃。
我的目标版本是19。 minVersion = 11;
<uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="19" />

我还将包括菜单按钮,看看是否有帮助。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- Will always be in the overflow -->
    <item android:id="@+id/menu_drink_specials"
          android:title="@string/drinks"
          android:icon="@drawable/added"
          android:showAsAction="never"/>
    <item android:id="@+id/menu_food_specials"
          android:title="@string/food"
          android:icon="@drawable/added"
          android:showAsAction="never"/>
    <item android:id="@+id/menu_events"
          android:title="@string/events"
          android:icon="@drawable/added"
          android:showAsAction="never"/>
    <item android:id="@+id/sort_location"
          android:title="@string/sortLocation"
          android:icon="@drawable/added"
          android:showAsAction="never"/>
</menu>

有没有其他人遇到这个问题?在其他版本中它工作得如此良好,而且没有任何错误。

感谢您的时间, Mike


你能分享一下堆栈跟踪吗? - Nikola Despotoski
很遗憾,我不能这样做,因为我无法在模拟器上导致它崩溃。虽然在4.4.2的手机上,图标仍然不会出现在模拟器上。 - michaelp
@michaelp 默认情况下,溢出菜单中不显示图标。您使用了一些变通方法吗? - matiash
5个回答

2
你确定溢出菜单中的项目旁边显示了图标吗?这是有意不允许的: 在Honeycomb Android 3.0中为操作栏菜单项显示图标 似乎有几个黑客方法可以使类似的操作起作用。也许你正在使用其中之一,这可能是导致崩溃的原因。
但是,如果你想完全控制它,最好扩展PopupWindow并将任何你想要的布局简单地填充到其中。然后,在操作栏中创建一个“虚假”的溢出按钮,并配置PopupWindow在其下方显示。

所以我确信图标会显示在溢出菜单中的项目旁边。我添加了一个hack来让它发生,它们正确地显示出来了。最终我选择了虚假的溢出按钮,然后向下充气。感谢您的建议! - michaelp

1
您使用android:showAsAction="never"设置项目的方式永远不会将图标放入溢出菜单中。默认情况下,Android不允许这样做。显示图标的唯一方法是使showAsAction等于alwaysifroom,并且还要设置android:icon。没有在溢出菜单中显示图标,您的应用程序很可能看起来很好。

0
请将以下代码放入您的活动中:

尝试将此代码放置在您的活动中。

@Override
public boolean onMenuOpened(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(NoSuchMethodException e){
                Log.e(TAG, "onMenuOpened", e);
            }
            catch(Exception e){
                throw new RuntimeException(e);
            }
        }
    }
    return super.onMenuOpened(featureId, menu);
}

0
请将这些属性添加到菜单标签中并尝试。
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"

0

你配置了 "android:showAsAction="never"",这样将永远不会显示图标到溢出菜单中。

尝试像这样更改你的代码

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- Will always be in the overflow -->
    <item android:id="@+id/menu_drink_specials"
          android:title="@string/drinks"
          android:icon="@drawable/added"
          android:showAsAction="ifRoom"/>
    <item android:id="@+id/menu_food_specials"
          android:title="@string/food"
          android:icon="@drawable/added"
          android:showAsAction="ifRoom"/>
    <item android:id="@+id/menu_events"
          android:title="@string/events"
          android:icon="@drawable/added"
          android:showAsAction="ifRoom"/>
    <item android:id="@+id/sort_location"
          android:title="@string/sortLocation"
          android:icon="@drawable/added"
          android:showAsAction="ifRoom"/>
</menu>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接