使用属性修改可绘制元素颜色

22

我试图通过使用属性来创建一个自定义的Drawable,但是我遇到了一个膨胀错误。

01-21 11:01:06.171: E/AndroidRuntime(13695): Caused by: android.content.res.Resources$NotFoundException: 
File res/drawable/action_bar_background.xml from drawable resource ID #0x7f020000

我的action_bar_background.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
 android:shape="rectangle" >
    <gradient
        android:angle="90"
        android:endColor="?attr/ActionBarEndColor"
        android:startColor="?attr/ActionBarStartColor" 
    />
</shape>

我的attr.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <attr name="ActionBarStartColor" format="reference|color" />
     <attr name="ActionBarEndColor" format="reference|color" />
</resources>

我的themes.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme.Theme1" parent="@style/Theme.GreenDroid.Light.NoTitleBar">
        <item name="ActionBarStartColor">@color/greyDark</item>
        <item name="ActionBarEndColor">@color/greyLight</item>
    </style>

    <style name="Theme.Theme2" parent="@style/Theme.GreenDroid.Light.NoTitleBar">
        <item name="ActionBarStartColor">@color/myRed</item>
        <item name="ActionBarEndColor">@color/myWhite</item>
    </style>
</resources>

我不明白,我的属性是引用还是颜色,在themes.xml中“强制”设置颜色也不起作用。

有人能帮忙吗?

我找到了这个问题,但它没有解决我的问题。


我找到的唯一解决方案是使用多个带有所选颜色的可绘制文件,并在主题文件中进行引用。 - Ahmet
1
此问题已在Android L预览版中得到解决,具体请参见:https://code.google.com/p/android/issues/detail?id=26251 - Bianca Daniciuc
我发现这个问题在Lollipop中已经被修复,但在Kitkat及更早版本中仍然无法正常工作。 - Georgy Gobozov
1个回答

13

大家好!从Lollipop(21)开始,您可以使用属性来引用诸如颜色之类的内容,例如?attr/colorPrimary

根据我所知,您无法从可绘制对象中引用样式属性。在Android平台资源($ANDROID_HOME/platforms/android-*/data/res/)中,我找不到像这样使用的例子,所有的可绘制对象,即使是渐变可绘制对象也是在原地定义或者只是引用其他的可绘制对象,例如颜色可绘制对象。

这里有一个相关的错误报告(请点亮它):

https://code.google.com/p/android/issues/detail?id=26251

您可以通过使用单独的xml可绘制对象来解决此问题,如下所述:

https://dev59.com/E2sz5IYBdhLWcg3wOVP5#13471695


2
不幸的是,在低于API 21的任何设备上仍然会崩溃。(因此,在运行KitKat或更低版本的设备上,它仍然会崩溃。) - Lorne Laliberte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接