GetResources(). getColor() устарел

Использование: buildToolsVersion "22.0.1", targetSdkVersion 22 в моем файле gradle.

Я обнаружил, что полезный getResources().getColor(R.color.color_name) устарел.

Что я должен использовать вместо этого?

Ответ 1

Похоже, что лучший подход заключается в использовании:

ContextCompat.getColor(context, R.color.color_name)

например:

yourView.setBackgroundColor(ContextCompat.getColor(applicationContext,
                            R.color.colorAccent))

Это выберет метод двухпараметрического зефира или метод перед зефиром соответственно.

Ответ 2

ну, он устарел в android M, поэтому вы должны сделать исключение для android M и ниже. Просто добавьте текущую тему в функцию getColor. Вы можете получить текущую тему с помощью getTheme().

Это сделает трюк в фрагменте, вы можете заменить getActivity() на getBaseContext(), yourContext и т.д., которые сохраняют ваш текущий контекст

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    yourTitle.setTextColor(getActivity().getResources().getColor(android.R.color.white, getActivity().getTheme()));
}else {
    yourTitle.setTextColor(getActivity().getResources().getColor(android.R.color.white));
}

* p.s: цвет устарел в M, но drawable устарел в L

Ответ 3

Вам нужно использовать ContextCompat.getColor(), который является частью библиотеки поддержки V4 (поэтому он будет работать для всего предыдущего API).

ContextCompat.getColor(context, R.color.my_color)

Как указано в документации, "Начиная с M, возвращенный цвет будет оформлен для указанной темы Контекста". Так что не беспокойтесь об этом.

Вы можете добавить библиотеку поддержки V4, добавив следующее в массив зависимостей внутри вашего приложения build.gradle:

compile 'com.android.support:support-v4:23.0.1'

Ответ 4

Я обнаружил, что полезный getResources(). getColor (R.color.color_name) устарел.

Он не устарел на уровне API 21, согласно документации.

Он устарел в M Developer Preview. Однако метод замены (двухпараметрический getColor(), который принимает идентификатор ресурса цвета и объект Resources.Theme) доступен только в M Developer Preview.

Следовательно, прямо сейчас продолжайте использовать однопараметрический метод getColor(). Позже в этом году рассмотрим использование двухпараметрического метода getColor() на устройствах Android M, возвращаясь к устаревшему однопараметрическому методу getColor() на старых устройствах.