Повторное использование градиента с цветами, зависящими от темы

В двух разных действиях я хочу использовать один и тот же градиент, но с разными цветами. Я думаю, что градиентные цвета относятся к теме активности следующим образом:

Я добавил следующие строки в attrs.xml

<attr name="backgroundTopColor" format="color" />
<attr name="backgroundBottomColor" format="color" />

в bg_gradient.xml я набрал

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient 
        android:startColor="?backgroundTopColor" 
        android:endColor="?backgroundBottomColor" 
        android:angle="270" />
    <corners android:radius="0dp" />
</shape>

В теме активности я добавил

<item name="backgroundTopColor">#FFFFFFFF</item>
<item name="backgroundBottomColor">#FFFFFF00</item>

После запуска приложения в logcat

02-07 14:03:59.479: ОШИБКА/AndroidRuntime(2096): Причина: java.lang.UnsupportedOperationException: Невозможно преобразовать в цвет: type=0x2
02-07 14:03:59.479: ОШИБКА/AndroidRuntime (2096): в android.content.res.TypedArray.getColor(TypedArray.java:326)
02-07 14:03:59.479: ОШИБКА/AndroidRuntime (2096): в android.graphics.drawable.GradientDrawable.inflate (GradientDrawable.java:647)
02–07 14:03:59.479: ОШИБКА/AndroidRuntime (2096): в android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:788)
02–07 14 :03:59.479: ОШИБКА/AndroidRuntime(2096): в android.graphics.drawable.Drawable.createFromXml(Drawable.java:729)
02-07 14:03:59.479: ОШИБКА/AndroidRuntime(2096): в android .content.res.Resources.loadDrawable(Resources.java:1694)
02-07 14:03:59.479: ERROR/AndroidRuntime(2096): ... еще 29

Как я могу это решить?

Спасибо

Примечание: уровень API = 8


person Premier    schedule 07.02.2011    source источник


Ответы (1)


Вы должны использовать "?attr/backgroundTopColor" вместо "?backgroundTopColor" для ссылки на свои атрибуты.

Редактировать: что произойдет, если вы косвенно ссылаетесь на цвет? Вместо того, чтобы в вашей теме говорить:

<item name="backgroundTopColor">#FFFFFFFF</item>

Ты делаешь это:

<item name="backgroundTopColor">@color/myColor</item>

Затем в colors.xml вы добавляете:

<color name="myColor">#FFFFFFFF</color>

Я подозреваю, что может происходить то, что атрибут ожидает явный цвет. По крайней мере, я сделал именно то, что вы описали, за исключением того, что я всегда косвенно ссылаюсь на цвет, а не помещаю его прямо в свою тему.

person Dan Lew    schedule 07.02.2011
comment
Эта проблема была исправлена ​​недавно, но только в предварительной версии L: code.google.com. /p/android/issues/detail?id=26251 - person Hassan Ibraheem; 25.07.2014