Повторное использование градиента для рисования в зависимости от цвета - PullRequest
3 голосов
/ 07 февраля 2011

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

Я добавил следующие строки в 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: ОШИБКА / AndroidRuntime (2096): ... еще 29

Как мне это решить?

Спасибо

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

1 Ответ

0 голосов
/ 07 февраля 2011

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

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

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

Вы делаете это:

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

Затем в colors.xml добавьте:

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

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

...