Android получает цвет как строковое значение - PullRequest
83 голосов
/ 17 февраля 2011

Если я определил цвет в ресурсах

<resources>
    <color name="someColor">#123456</color>
</resources>

можно установить цвет по его идентификатору, например

view.setTextColor(R.color.someColor);

Можно ли также получить значение строки цвета из colors.xml?

Что-то вроде

colorStr = getColor(R.color.someColor);
// -> colorStr = "#123456"

Если да, кто-нибудь может привести пример?

Спасибо

Ответы [ 10 ]

128 голосов
/ 17 февраля 2011

Это ваш ответ

colorStr=getResources().getString(R.color.someColor);

вы получите

 colorStr = "#123456"
121 голосов
/ 17 марта 2015

Просто для удобства копирования:

"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color));

Или, если хотите, без прозрачности:

"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color) & 0x00ffffff);
24 голосов
/ 19 апреля 2016

Ответы, приведенные выше, не обновляются.

Пожалуйста, попробуйте это

String colorHex = "#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.dark_sky_blue) & 0x00ffffff);
9 голосов
/ 19 августа 2016

Причина getResources().getColor нужно api> 23. Так что это лучше: просто ради простого копирования и вставки:

Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) );

Или, если вы хотите, чтобы это было без прозрачности: `

Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) & 0x00ffffff );

8 голосов
/ 19 октября 2017

Все решения здесь, использующие Integer.toHexString(), прерываются, если в вашей шестнадцатеричной строке будут первые нули. Цвета типа #0affff приведут к #affff. Используйте это вместо:

String.format("#%06x", ContextCompat.getColor(this, R.color.your_color) & 0xffffff)

или с альфа:

String.format("#%08x", ContextCompat.getColor(this, R.color.your_color) & 0xffffffff)
4 голосов
/ 03 июня 2016

Для API выше 21 вы можете использовать

getString(R.color.color_name);

Это вернет цвет в строковом формате.Чтобы преобразовать это в цвет в целочисленном формате (иногда принимаются только целые числа), тогда:

Color.parseColor(getString(R.color.color_name));

Вышеуказанное выражение возвращает целочисленный эквивалент цвета, определенного в файле color.xml

1 голос
/ 24 мая 2018

Добавьте @SuppressLint ("ResourceType") в случае возникновения ошибки. Как и ниже.

private String formatUsernameAction(UserInfo userInfo, String action) {
        String username = userInfo.getUsername();
        @SuppressLint("ResourceType") String usernameColor = getContext().getResources().getString(R.color.background_button);
        return "<font color=\""+usernameColor+"\">" + username
                + "</font> <font color=\"#787f83\">" + action.toLowerCase() + "</font>";
    }
1 голос
/ 21 августа 2016

Вот как я это сделал:

String color = "#" + Integer.toHexString(ContextCompat.getColor
(getApplicationContext(), R.color.yourColor) & 0x00ffffff);
1 голос
/ 17 февраля 2011

Не думаю, что для этого есть стандартная функциональность. Однако вы можете превратить возвращаемое значение из getColor() в шестнадцатеричное значение и превратить шестнадцатеричное значение в строку.

hex 123456 = int 1193046;

0 голосов
/ 24 июня 2018

Если вы не хотите использовать ContextCompat или SuppressLint, просто добавьте ресурс string прямо под color.

Вместо

<color name="text_color">#FFFFFF</color>

Используйте

<color name="text_color">#FFFFFF</color>
<string name="text_color_string">#FFFFFF</string>

Ваш код становится более повторяющимся, но он намного чище. Кроме того, подделка обновления string после изменения color практически невозможна, поскольку они находятся рядом друг с другом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...