可绘制资源中的?attr导致Resources $ NotFoundException

时间:2018-11-27 12:29:40

标签: android drawable attr

在图层列表中,我在某些项目中使用了纯色,并使用?attr/text_color设置了颜色。

<stroke android:color="?attr/text_color" />

,并将此可绘制对象设置为按钮的背景。 android:background="@drawable/myLayerListDrawable"

直到我在较低的api 18上运行该项目之前,我一直都在使用它。

  

原因:android.content.res.Resources $ NotFoundException:文件   可绘制资源ID#0x7f080063中的res / drawable / myLayerListDrawable.xml

     

原因:java.lang.UnsupportedOperationException:无法转换为   颜色:type = 0x2

为什么会这样以及如何解决!!

res \ drawable \ myLayerListDrawable.xml

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <selector>
        <item android:state_pressed="true">
            <shape android:shape="rectangle">
                <solid android:color="?attr/background_button_pressed" />
                <stroke
                    android:width="0.7dp"
                    android:color="?attr/text_color" />

                <corners android:radius="10dp" />

            </shape>
        </item>


        <item>
            <shape android:shape="rectangle">
                <solid android:color="@android:color/transparent" />
                <stroke
                    android:width="0.7dp"
                    android:color="?attr/text_color" />

                <corners android:radius="10dp" />

            </shape>
        </item>


    </selector>


</item>

-------------------------------------------- -------------------------------------------------- --------

最终答案

  

我们无法在api 21之前的XML可绘制资源中使用?attr   aapt在编译时创建的资源。用于的Attr资源   运行时动态连接。

解决方案是为每个主题创建不同的图块。

2 个答案:

答案 0 :(得分:0)

您无法访问"?attr/myColor之类的颜色资源

有关更多信息,请阅读

使用

<stroke android:color="@color/myColor" />

代替

<stroke android:color="?attr/myColor" />

并确保您在 res / values / colors.XML

中添加了myColor

答案 1 :(得分:0)

您必须在样式或attr文件中添加参考。

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <!-- Attributes must be lowercase as we want to use them for drawables -->
   <attr name="myColor" format="reference" />
</resources>

并将其添加到您的主题:

<item name="myColor">#c3c3c3</item>