【问题标题】:Using attribute to modify a drawable element color使用属性修改可绘制元素颜色
【发布时间】:2012-01-21 10:11:11
【问题描述】:

我尝试通过使用属性来自定义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>

我的主题.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>

我不明白为什么,我的属性是引用或颜色,如果我在 theme.xml 中“强制”颜色,它也不起作用。

有人可以帮忙吗?

我找到了this question,但这并不能解决我的问题。

【问题讨论】:

  • 我找到的唯一解决方案是使用多个具有所选颜色的可绘制文件并在主题文件中进行引用。
  • 此问题已在 Android L 预览版中解决,此处指定:code.google.com/p/android/issues/detail?id=26251
  • 我在 Lollipop 中发现了这个问题,但仍然无法在 Kitkat 和更少的情况下使用

标签: android themes attr


【解决方案1】:

大家好消息!从 Lollipop (21) 开始,您可以使用属性来引用颜色等内容,例如?attr/colorPrimary.

原答案:

据我所知,您无法从可绘制对象中引用样式属性,我在 Android 平台资源 ($ANDROID_HOME/platforms/android-*/data/res/) 中找不到类似的用法,我所看到的只是每个可绘制对象(即使是渐变可绘制对象)都已就地定义或他们只是引用其他可绘制对象,例如颜色可绘制对象。

这是一个相关的错误报告(星号):

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

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

https://stackoverflow.com/a/13471695/172670

【讨论】:

  • 不幸的是,它仍然会在低于 API 21 的任何设备上崩溃。(因此在运行 KitKat 或更低版本的设备上它仍然会崩溃。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
  • 2020-07-18
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多