Я хочу использовать цвета из темы, чтобы применить ее к некоторому HTML, которое мое приложение выполняет рендеринг. Мне интересно, могу ли я это сделать?
Я хочу использовать цвета, как они указаны в theme.xml:
<item name="colorBackground">@android:color/background_dark</item>
<item name="textColorPrimary">@android:color/primary_text_dark</item>
Таким образом, глядя на них, они объявляются одинаково. Поэтому я думал, что я мог бы получить к ним доступ так же.
Это не причина. При попытке получить доступ к этим значениям следующим образом:
TypedValue tv = new TypedValue();
getTheme().resolveAttribute(android.R.attr.colorBackground, tv, true);
System.out.println("tv.string=" + tv.string);
System.out.println("tv.coerced=" + tv.coerceToString());
int colorResourceId = getResources().getColor(tv.resourceId);
System.out.println("colorResourceId=" + colorResourceId);
tv = new TypedValue();
getTheme().resolveAttribute(android.R.attr.textColorPrimary, tv, true);
System.out.println("tv.string=" + tv.string);
System.out.println("tv.coerced=" + tv.coerceToString());
colorResourceId = getResources().getColor(tv.resourceId);
System.out.println("colorResourceId=" + colorResourceId);
Я получаю это как результат:
I/System.out( 1578): tv.string=null
I/System.out( 1578): tv.coerced=#ffffffff
I/System.out( 1578): colorResourceId=-1
I/System.out( 1578): tv.string=res/color/primary_text_light.xml
I/System.out( 1578): tv.coerced=res/color/primary_text_light.xml
I/System.out( 1578): colorResourceId=-16777216
Результаты разные. Первый на самом деле дает мне цвет "#fffffff", который будет работать для меня, второй - только мне.
Нужно ли мне перепрыгнуть через несколько обручей, чтобы разрешить фактический цвет? Действительно ли мое первоначальное намерение работает? Может быть, это не сработает, потому что цвета могут быть произвольными чертежами?
Я не нашел документацию, относящуюся к релевантной, но, если вы знаете, просто укажите мне, пожалуйста.
Btw. Я также попробовал getStyledAttributes(), но у этого были в основном те же проблемы.