Android drawable图标没有出现在4.4.2上

时间:2014-04-26 00:57:49

标签: android icons android-drawable

我在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>

还有其他人遇到过这个问题吗?看起来奇怪的是它在其他版本中工作得很好,并没有引起任何错误。

谢谢你的时间, 麦克

5 个答案:

答案 0 :(得分:2)

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

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

似乎有几种黑客可以做出像这样的工作。也许您正在使用其中一个,这是导致您崩溃的原因。

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

答案 1 :(得分:1)

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

答案 2 :(得分: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);
}

答案 3 :(得分:0)

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

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

答案 4 :(得分: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>