【问题标题】:add image to menu item将图像添加到菜单项
【发布时间】:2013-04-02 11:59:28
【问题描述】:

我的res/drawable-hdpi/delete.png 中有.png 图像我想将其作为图标添加到我的菜单item

我用过:

删除.xml

<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/deletebutton">
</bitmap>

菜单activity_main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:id="@+id/create"
    android:showAsAction="always"
    android:title="@string/createTask"/>
<item
    android:id="@+id/delete"
    android:showAsAction="always"
    android:icon="@drawable/delete"
    android:title="@string/deleteTask" />
</menu>

但它不起作用。

我把xml文件去掉,直接加载图片试试,这里是日志文件。

04-02 17:46:50.887: E/AndroidRuntime(11957): FATAL EXCEPTION: main
04-02 17:46:50.887: E/AndroidRuntime(11957): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.devicecontrolpanel/com.example.devicecontrolpanel.Main}: android.content.res.Resources$NotFoundException: Resource ID #0x7f020008
04-02 17:46:50.887: E/AndroidRuntime(11957):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2205)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2240)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at android.app.ActivityThread.access$600(ActivityThread.java:139)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at android.os.Looper.loop(Looper.java:156)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at android.app.ActivityThread.main(ActivityThread.java:4987)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at java.lang.reflect.Method.invokeNative(Native Method)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at java.lang.reflect.Method.invoke(Method.java:511)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at dalvik.system.NativeStart.main(Native Method)
04-02 17:46:50.887: E/AndroidRuntime(11957): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f020008
04-02 17:46:50.887: E/AndroidRuntime(11957):    at android.content.res.Resources.getValue(Resources.java:1105)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at android.content.res.Resources.getDrawable(Resources.java:674)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at android.widget.CompoundButton.setButtonDrawable(CompoundButton.java:189)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at com.example.devicecontrolpanel.Main.listAllAlarms(Main.java:69)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at com.example.devicecontrolpanel.Main.onCreate(Main.java:25)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at android.app.Activity.performCreate(Activity.java:4538)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
04-02 17:46:50.887: E/AndroidRuntime(11957):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2161)
04-02 17:46:50.887: E/AndroidRuntime(11957):    ... 11 more

【问题讨论】:

    标签: java android xml


    【解决方案1】:

    一开始你真的不需要delete.xml

    <item
        android:id="@+id/delete"
        android:showAsAction="always"
        android:icon="@drawable/deletebutton"
        android:title="@string
    />
    

    而且我认为你在这里有问题:

    android:title="@string
    

    在这里,您缺少正确的撇号和值。如果您不想在 MenuItem 中显示标题,只需删除此属性即可。

    更新:

    java.lang.StackOverflowError
    

    您在 loadDrawable() 处有 SO,这意味着您的 Drawable 太大而无法加载(您的堆栈已完全填满)。尝试使用另一个(较小的)或修剪实际的。还要确保所有可绘制文件夹中都有您的图像。

    【讨论】:

      【解决方案2】:

      它已经过期了,但我会给出一个答案以供其他人将来参考,您可以像这样以编程方式进行进一步的样式设置:

      public class MyClass {
          public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
      
              // Do your other stuff here
      
              MenuItem item = menu.getItem(0);
      
              if (item.getItemId() == R.id.action_example) {
                  ImageView imageView = new ImageView(getActivity());
                  imageView.setMaxHeight(18);
                  imageView.setMaxWidth(18);
                  imageView.setImageResource(R.drawable.barchart32);
      
                  item.setActionView(imageView);
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        看看这个:

        <?xml version="1.0" encoding="utf-8"?>
        <menu xmlns:android="http://schemas.android.com/apk/res/android">
            <item
                android:id="@+id/open" android:icon="@drawable/openicon"
                android:title="Open the file" />
        
            <item
                android:id="@+id/save"
                android:icon="@drawable/saveicon"
                android:title="Save the file" />
        </menu>
        

        不需要设置位图文件,只使用上面的行。希望这会帮助你。

        关注本教程Menus in Android

        【讨论】:

          【解决方案4】:

          android:background="@drawable/ic_play" /&gt; 是我正在做的,

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-11-01
            • 2019-08-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-10-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多