2015-08-05 3 views
265

Использование: buildToolsVersion "22.0.1", targetSdkVersion 22 в моем файле градации.getResources(). GetColor() устарел

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

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

+0

Где вы это видите? http://developer.android.com/reference/android/content/res/Resources.html#getColor (int) –

+4

Это обсуждалось здесь: http://stackoverflow.com/questions/31590714/getcolorint-id-deprecated -on-android-mnc-preview-2 – BrentM

+4

Использовать ContextCompat.getColor (context, R.color.color_name) –

ответ

618

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

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

Это будет выбрать метод параметра Зефир два или предварительно Зефир метод надлежащим образом.

20

Я нашел, что полезный getResources(). GetColor (R.color.color_name) устарел.

Он не устарел в API Level 21, в соответствии с the documentation.

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

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

20

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

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

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

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

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

хорошо это осуждается в 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)); 
} 

* пс: цвет осуждается в M, но рисуем осуждается в L

+0

Вместо 'getActivity(). getTheme()', я бы использовал getContext(). getTheme() ' –

+0

Его очень полезно. Он работает для меня –

Смежные вопросы