Ты можешь использовать:
getResources().getColor(R.color.idname);
Проверьте здесь, как определить пользовательские цвета:
http://sree.cc/google/android/defining-custom-colors-using-xml-in-android
РЕДАКТИРОВАТЬ (1):
Так getColor(int id)
как сейчас устарела , это должно быть использовано:
ContextCompat.getColor(context, R.color.your_color);
(добавлено в библиотеку поддержки 23)
EDIT (2):
Код ниже может использоваться как до, так и после зефира (API 23)
ResourcesCompat.getColor(getResources(), R.color.your_color, null); //without theme
ResourcesCompat.getColor(getResources(), R.color.your_color, your_theme); //with theme
android.R.color.some_color
слишком, например:getResources().getColor(android.R.color.holo_blue_bright)
(по крайней мере, для API 17)ContextCompat
иResourcesCompat
? Если нет практической разницы, было бы менее запутанным, если бы вы удалили один из них из своего ответа.Исходя из новой библиотеки поддержки Android (и этого обновления), теперь вам нужно позвонить:
Согласно документации :
Этот метод устарел на уровне API 23 . Вместо этого используйте getColor (int, Theme)
Это то же самое решение для
getResources().getColorStateList(id)
:Вы должны изменить это так:
РЕДАКТИРОВАТЬ 2019
Относительно
ThemeOverlay
использования контекста ближайшего представления:Таким образом, вы получите правильный цвет на основе вашего ThemeOverlay.
Особенно необходимо, когда в одном упражнении вы используете разные темы, такие как темная / светлая тема. Если вы хотите больше узнать о темах и стилях, предлагается этот доклад: Разработка тем со стилем
источник
Theme
можно передать значение null, поэтому просто позвоните,getColor(R.color.my_color, null)
если не знаете, какую тему передать.Определите свой цвет
Значения / color.xml
Получить цвет int и установить его
Смотрите также
источник
getResources()
вActivity
илиFragment
?getResources()
вне Деятельности или Фрагмента.getResources()
также доступен как публичный API для всего, что реализует Context, а также для Views.Лучший подход
Как ответ @sat, хороший подход для получения цвета
или используйте ниже путь, когда у вас нет доступа к
getResources()
методу.Что я делаю
Его проще всего использовать в любом месте вашего приложения! Даже в классе Util или любом классе, где у вас нет Context или getResource ()
Проблема (когда у вас нет контекста)
Когда у вас нет
Context
доступа , как метод в вашемUtil
классе.Предположим ниже метод без контекста.
Теперь вы будете передавать
Context
в качестве параметра в этом методе и использоватьgetResources().
Итак, вот уникальное решение Bonus, с помощью которого вы можете получить доступ к ресурсам из любой точки мира
Util class
. ДобавьтеResources
в свойApplication
класс или создайте его, если он не существует.Добавьте поле имени к вашему
manifest.xml
<application
тегу. (Если еще не добавлено)Теперь тебе пора. Используйте в
ResourcesCompat.getColor(App.getRes(), R.color.your_color, null);
любом месте приложения.источник
Я обновил, чтобы использовать,
ContextCompat.getColor(context, R.color.your_color);
но иногда (На некоторых устройствах / версиях Android. Я не уверен), что вызывает NullPointerExcepiton.Поэтому, чтобы заставить его работать на всех устройствах / версиях, я прибегаю к старому способу сделать это, в случае нулевого указателя.
источник
Resources.getColor(int, Theme)
если можете? Вы не должны ловить исключения во время выполнения.Для получения дополнительной информации о другом случае использования, который может помочь вспомнить этот вопрос в результатах поиска, я хотел применить альфу к цвету, определенному в моих ресурсах.
Используя правильный ответ @ sat:
источник
Нашел более простой способ, который также работает:
источник
Доступ к цветам из неактивного класса может быть затруднен. Одна из найденных альтернатив - использование
enum
.enum
предлагает большую гибкость.источник
Самый последний метод работы:
источник
Если ваш текущий мин. Уровень API 23, вы можете просто использовать,
getColor()
как мы используем дляgetString()
:Если вы хотите ниже уровня API
23
, просто используйте это:Но обратите внимание, что
getResources().getColor()
это не рекомендуется в уровне API23
. В этом случае заменить выше:ContextCompat : помощник для доступа к функциям в
Context
Если вы хотите, вы можете ограничиться,
SDK_INT
как показано ниже:источник
в деятельности
фрагментарно
например:
источник