【问题标题】:Android drawable icon not appearing on 4.4.2Android 可绘制图标未出现在 4.4.2
【发布时间】:2014-07-01 20:04:37
【问题描述】:

我在 Play 商店 (Raleigh Nights) 上有一个 Android 应用程序,我刚刚注意到溢出按钮中的可绘制图标没有显示,尽管文本显示正确。一切都在 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>

还有其他人遇到过这个问题吗?奇怪的是它在其他版本中运行良好并且没有抛出任何错误。

感谢您的宝贵时间, 迈克

【问题讨论】:

  • 你能分享堆栈跟踪吗?
  • 不幸的是,我不能,因为我实际上无法让它在模拟器上崩溃。图标仍然没有出现在模拟器上,就像在 4.4.2 手机上一样。
  • @michaelp 默认情况下,图标不会显示在溢出菜单中。您是否为此使用了一些解决方法?

标签: android icons android-drawable


【解决方案1】:

您确定溢出菜单中的项目旁边显示有图标吗?这是故意不允许的:

Displaying icon for menu items of Action Bar in Honeycomb android 3.0

似乎有几个技巧可以使这样的事情起作用。也许您正在使用其中之一,这就是导致您崩溃的原因。

但是,如果您想完全控制它,最好扩展PopupWindow 并简单地将您想要的任何布局添加到其中。然后,您可以在操作栏中创建一个“假”溢出按钮,并将 PopupWindow 配置为在其下方显示。

【讨论】:

  • 所以我很肯定图标显示在溢出菜单中的项目旁边。我确实添加了一个技巧来让这种情况发生并且它们正确显示。我最终选择的是假溢出按钮,然后在下面充气。谢谢你的建议!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    @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);
    }
    

    【讨论】:

      【解决方案4】:

      将这些属性添加到菜单标签并尝试

      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools"
      

      【讨论】:

        【解决方案5】:

        您配置了“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>
        

        【讨论】:

          猜你喜欢
          • 2014-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-07
          • 1970-01-01
          • 2015-03-31
          • 1970-01-01
          相关资源
          最近更新 更多