Подтвердить что ты не робот

Как извлечь значения цвета (#rgb) из темы Android?

Я хочу использовать цвета из темы, чтобы применить ее к некоторому 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(), но у этого были в основном те же проблемы.

4b9b3361

Ответ 1

Я думаю, вы должны переименовать colorResourceId в myColor или что-то в этом роде, потому что это то, что должно было быть в вашем коде, насколько я могу судить.

-16777216 эквивалентен 0xFF000000, который является черным цветом, поэтому, вероятно, ваша тема была черным текстом на белом фоне.