Intereting Posts
Отображение предварительного просмотра камеры Android до окончательного изображения Импорт проекта библиотеки несколько раз в Android Studio 1.3.1 заставляет библиотеку исчезать Android Studio – ошибка ADB – «… устройство несанкционировано. Проверьте диалоговое окно подтверждения на своем устройстве. " Как изменить размер содержимого веб-обозревателя в android? Как добавить анимацию в DialogFragment? Android, обнаружение при запуске других приложений Офлайн-веб-приложение HTML5 на Android Android 5.0 Lollipop – перезагрузка Nexus 10 и отладка USB не обнаружены? Как использовать метод registerReceiver? Как показать вывод местоположения видимой части карты в андроиде? Нельзя отбрасывать из фрагмента Как указать путь библиотек в файле Android.mk или файле Application.mk? Android: рейтинг не отображается, становится видимым только при касании Передача нескольких флагов в намерение в Android Как реализовать кнопку на Android-виджете

GetColor (int id) устарел на Android 6.0 Marshmallow (API 23)

Метод Resources.getColor(int id) устарел.

 @ColorInt @Deprecated public int getColor(@ColorRes int id) throws NotFoundException { return getColor(id, null); } 

Что я могу сделать?

Solutions Collecting From Web of "GetColor (int id) устарел на Android 6.0 Marshmallow (API 23)"

Начиная с Android Support Library 23,
В ContextCompat добавлен новый метод getColor () .

Его описание с официального JavaDoc:

Возвращает цвет, связанный с определенным идентификатором ресурса

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

Итак, просто позвоните :

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

Вы можете проверить исходный код ContextCompat.getColor() на GitHub .

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

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

Если вы еще не используете библиотеку поддержки, вам понадобится добавить следующую строку в массив dependencies внутри вашего приложения build.gradle (обратите внимание: это необязательно, если вы уже используете библиотеку appcompat (V7) ):

 compile 'com.android.support:support-v4:23.0.0' # or any version above 

Если вам интересны темы, в документации указано, что:

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

Я не хочу включать библиотеку поддержки только для getColor , поэтому я использую что-то вроде

 public static int getColorWrapper(Context context, int id) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { return context.getColor(id); } else { //noinspection deprecation return context.getResources().getColor(id); } } 

Я думаю, что код должен работать нормально, а устаревший getColor не может исчезнуть из API <23.

В Android Marshmallow многие методы устарели.

Например, чтобы использовать цвет

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

Также, чтобы получить возможность использования

 ContextCompat.getDrawable(context, R.drawable.drawble_name); 

Для Drawable

 ContextCompat.getDrawable(getApplicationContext(),R.drawable.back_arrow) 

Для цвета

  ContextCompat.getColor(getApplicationContext(),R.color.red) 

Самый короткий ответ:

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

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

 if (Build.VERSION.SDK_INT >= 23) { return ctx.getColor(R.color.YOURCOLOR); } else { return ctx.getRecources().getColor(R.color.YOURCOLOR); } 

Я надеюсь, что это помогает. Я тестировал его на Android Marshmallow, и это сработало.

Метод getColor () устарел в API 23 и был введен в ContextCompat. Прежде чем использовать метод getColor () с помощью ContextCompat, добавьте зависимости в скрипте build.gradle, который:

 dependencies{ // Other stuff compile 'com.android.support:support-v4:23.0.0' } 

Затем метод getColor () может быть использован как:

 int colorcode = ContextCompat.getColor(getApplicationContext(), R.color.your_color); 

В Mono / xamarin.android у меня была такая же проблема, и следующий код работал отлично:

 ContextCompat.GetColor (context, Resource.Color.myColor) 

В моем случае контекст – это моя деятельность (Android.Support.V7.App.AppCompatActivity), поэтому мой пример с реальным использованием:

 var color = new Android.Graphics.Color(ContextCompat.GetColor(this, Resource.Color.myColor)) 
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { return context.getResources().getColor(id, context.getTheme()); } else { return context.getResources().getColor(id); } 

Используйте это. Это помогает

Несмотря на то, что getColor() устарел в зефире, метод замены
getColor(int, Theme) доступен. Который может использоваться как альтернатива ContextCompat.getColor(context, R.color.your_color);

См. Это для получения дополнительной информации.

Используйте метод getColor(Resources, int, Theme) ResourcesCompat из Библиотеки поддержки Android.

 int white = new ResourcesCompat().getColor(getResources(), R.color.white, null); 

Я думаю, что это лучше отражает ваш вопрос, чем getColor(Context, int) ContextCompat поскольку вы спрашиваете о Resources . До уровня API 23 эта тема не будет применяться и метод вызовет getColor(int) но у вас не будет устаревшего предупреждения. Тема также может быть null .

Сюда:

 fab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.badge_participants_counter_color))); 

Я тоже расстроился. Моя потребность была очень проста. Все, что я хотел, это цвет ARGB из ресурсов, поэтому я написал простой статический метод.

 protected static int getARGBColor(Context c, int resId) throws Resources.NotFoundException { TypedValue color = new TypedValue(); try { c.getResources().getValue(resId, color, true); } catch (Resources.NotFoundException e) { throw(new Resources.NotFoundException( String.format("Failed to find color for resourse id 0x%08x", resId))); } if (color.type != TYPE_INT_COLOR_ARGB8) { throw(new Resources.NotFoundException( String.format( "Resourse id 0x%08x is of type 0x%02d. Expected TYPE_INT_COLOR_ARGB8", resId, color.type)) ); } return color.data; }