Android:具有可绘制资源的 ImageButton 引发 ResourceNotFoundException

Posted

技术标签:

【中文标题】Android:具有可绘制资源的 ImageButton 引发 ResourceNotFoundException【英文标题】:Android: ImageButton with drawable resources throws ResourceNotFoundException 【发布时间】:2015-10-07 02:00:26 【问题描述】:

我正在尝试通过关注this instruction 创建自己的按钮样式。所以我创建了两个可绘制对象(形状)。一种用于压制风格,一种用于普通风格。两者都只是在颜色上有所不同。

但是当我启动应用程序时,它会崩溃并出现异常(见下文)。不知何故,它找不到按钮资源。但为什么呢?

这是可绘制的形状(button_rounded_pressed.xml 和 button_rounded_normal.xml):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <solid android:color="?attr/colorPrimary" />
    <padding android:left="7dp"
             android:top="7dp"
             android:right="7dp"
             android:bottom="7dp" />
    <corners android:radius="8dp" />
</shape>

然后我创建了一个选择器 button_rounded.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_rounded_pressed"
          android:state_pressed="true" />
    <item android:drawable="@drawable/button_rounded_normal" />
</selector>

然后在 ImageButton 上使用这种样式/可绘制/选择器,如下所示:

    <ImageButton
            android:layout_
            android:layout_
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:layout_alignParentTop="true"
            android:src="@mipmap/ic_launcher"
            android:background="@drawable/button_rounded"
            />

但在扩展布局时运行应用程序会引发以下异常。

原因:android.content.res.Resources$NotFoundException:文件 res/drawable/button_rounded.xml 来自可绘制资源 ID #0x7f02003b 在 android.content.res.Resources.loadDrawable(Resources.java:1953) 在 android.content.res.TypedArray.getDrawable(TypedArray.java:601) 在 android.view.View.(View.java:3328)

注意:您可以访问我的代码via GitHub。

【问题讨论】:

我已经从 Github 下载了你的项目。它工作正常。 我克隆了这个项目,但它仍然在我的三星 Galaxy Nexus 上崩溃。 【参考方案1】:

我敢打赌,您正在测试棒棒糖之前的设备。您需要删除colorPrimary 属性。

编辑:根据this 错误报告,直到 Lollipop 才支持在可绘制对象中引用主题属性。

【讨论】:

没错,现在可以了。但同时它毫无价值,因为我想使用 AppStyle 中定义的颜色。 @Matthias 这是棒棒糖之前的设备中存在的一个错误。主题属性不能在可绘制对象中引用。看看这个code.google.com/p/android/issues/detail?id=26251。

以上是关于Android:具有可绘制资源的 ImageButton 引发 ResourceNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 资产与资源可绘制

Android Button 背景无法识别/使用可绘制对象

使用 Android 4.4.4 找不到可绘制资源

在 Android 上针对不同的屏幕尺寸和密度重用可绘制图像

如何在android中按名称访问可绘制资源

Android - 如何显示来自可绘制资源的图像?