【问题标题】:?attr in drawable resource causing Resources$NotFoundException? 可绘制资源中的 attr 导致 Resources$NotFoundException
【发布时间】:2019-04-29 04:44:27
【问题描述】:

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

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

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

在我在较低的 api 18 上运行此项目之前,我一直在使用它而没有任何问题。

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

原因:java.lang.UnsupportedOperationException:无法转换为 颜色:类型=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>

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

最终答案

我们不能在 xml 可绘制资源 pre api 21 中使用 ?attr。可绘制 aapt 在编译时创建的资源。 Attr 资源用于 运行时动态连接。

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

【问题讨论】:

  • 应该是&lt;stroke android:color="@color/myColor" /&gt;
  • @NileshRathod 我为不同的主题使用不同的颜色
  • 好的,但是你不能像"?attr/myColor"那样访问颜色

标签: android drawable attr


【解决方案1】:

你不能像"?attr/myColor那样访问你的颜色资源

更多信息请阅读

使用

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

代替

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

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

中添加了 myColor

【讨论】:

  • 如何在可绘制资源中使用基于主题的颜色?
  • @Mehran 检查这个答案stackoverflow.com/questions/13735675/…
  • @Mehran 测试用例试试这种方式android:color="?myColor"
  • 你是对的。在 API 21 之前无法在可绘制对象中引用颜色。解决方案是为每个主题创建不同的绘图。
【解决方案2】:

您必须在样式或 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 2022-10-22
    • 1970-01-01
    相关资源
    最近更新 更多