Intereting Posts
Каковы преимущества CursorLoaders? Андроид студия новый проект отсутствует папки Переменные участника vs setArguments в фрагментах Удалите неопубликованное приложение из Google Play Отклонить текущее уведомление о действии Перемещение фокуса с одного текстового поля Редактировать на другое Как программно очистить кэш имен Bluetooth в Android? Может ли мое приложение интегрироваться с галереей Android Android по умолчанию – как Picasa? Как конвертировать DP, PX, SP между собой, особенно DP и SP? Отключить / проверить местоположение макета (запретить спуфинг gps) Как создавать приложения в android, которые нельзя удалить? Можем ли мы сделать системные приложения? Как включить javadoc для библиотеки поддержки Android? Примечание: android.support.v4.text.ICUCompatIcs: не удается найти динамически ссылочный класс libcore.icu.ICU Изменение ширины развертки Spinner DropDown Не удается установить .apk на телефоне.

Получить color-int из цветового ресурса

Есть ли способ получить цвет-int из цветового ресурса? Я пытаюсь получить отдельные красные, синие и зеленые компоненты цвета, определенные в ресурсе (R.color.myColor), чтобы я мог установить значения трех поисковых баров на определенный уровень.


Для получения дополнительной информации о другом прецеденте, который может помочь выявить этот вопрос в результатах поиска, я хотел применить альфу к цвету, определенному в моих ресурсах. Используя правильный ответ @ sat:

int alpha = ... // 0-255, calculated based on some business logic int actionBarBackground = getResources().getColor(R.color.actionBarBackground); int actionBarBackgroundWithAlpha = Color.argb( alpha, Color.red(actionbarBackground), Color.green(actionbarBackground), Color.blue(actionbarBackground) ); 

Solutions Collecting From Web of "Получить color-int из цветового ресурса"

Вы можете использовать:

 getResources().getColor(R.color.idname); 

Проверьте, как определить пользовательские цвета:

http://sree.cc/google/android/defining-custom-colors-using-xml-in-android

EDIT (1): Поскольку теперь getColor(int id) устарел , это необходимо использовать:

 ContextCompat.getColor(context, R.color.your_color); 

(Добавлено в библиотеку поддержки 23)

EDIT (2):

Ниже код может использоваться как для pre, так и для post Marshmallow (API 23)

 ResourcesCompat.getColor(getResources(), R.color.your_color, null); //without theme ResourcesCompat.getColor(getResources(), R.color.your_color, your_theme); //with theme 

На основе новой библиотеки поддержки Android (и этого обновления) теперь вы должны позвонить:

ContextCompat.getColor(context, R.color.name.color);

Согласно документации :

 public int getColor (int id) 

Этот метод устарел на уровне API 23 . Вместо этого используйте getColor (int, Theme)

Это то же самое решение для getResources().getColorStateList(id) :

Вы должны изменить его следующим образом:

ContextCompat.getColorStateList(getContext(),id);

Вот несколько более полный пример (и обновленный для API 24 и ниже):

Определите свой цвет

Значения / color.xml

 <?xml version="1.0" encoding="utf-8"?> <resources> <!-- color int as #AARRGGBB (alpha, red, green, blue) --> <color name="orange">#fff3632b</color> ... <color name="my_view_color">@color/orange</color> </resources> 

Получить цвет int и установить его

 int backgroundColor = ContextCompat.getColor(context, R.color.my_view_color); // Color backgroundColor = ... (Don't do this. The color is just an int.) myView.setBackgroundColor(backgroundColor); 

Смотрите также

  • Как установить цвет фона в представлении
  • Цветные документы
  • Документация по дизайну цветного стиля

Я обновил для использования ContextCompat.getColor(context, R.color.your_color); Но иногда (на некоторых устройствах / версиях Android, я не уверен), что вызывает NullPointerExcepiton.

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

 try { textView.setTextColor(ContextCompat.getColor(getActivity(), R.color.text_grey_dark)); } catch(NullPointerException e) { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { textView.setTextColor(getContext().getColor(R.color.text_grey_dark)); } else { textView.setTextColor(getResources().getColor(R.color.text_grey_dark)); } } 

Используйте метод ResourcesCompat.getColor , хотя он имеет довольно подробные параметры.

Если вы используете только одну тему в своем приложении, вы можете упростить ссылку на цвета в коде ( «Как мне получить мой цвет сейчас?» ), Вы можете использовать пользовательский класс со всеми конкретными подходами Android-framework внутри. Используйте его как myView.setBackgroundColor(Color.getMyRed()) .

  1. В AndroidManifest.xml укажите ваше приложение :

     <application android:name="com.my_site.Application" ...> </application> 
  2. Создайте глобальный класс-помощник для вашего приложения на пути com.my_site чтобы получить контекст и ресурсы в любых статических методах :

     import android.content.Context; public class Application extends android.app.Application { private static Context context; public static Context getContext() { return Application.context; } public void onCreate() { super.onCreate(); Application.context = getApplicationContext(); } } 
  3. Создайте собственный класс Color со статическими getter-методами:

     import android.support.v4.content.res.ResourcesCompat; import com.my_site.mobile.R; /** * Simplify getting colors. */ public class Color { public static int getMyRed() { return ResourcesCompat.getColor( com.my_site.Application .getContext() .getResources(), R.color.my_red, null); } }