2015-09-02 2 views
16

У меня проблема. Я только что обновил с sdk 22 до 23, и предыдущая версия «getColorStateList()» устарела.getColorStateList устарел

Мой код был как этот

seekBar.setProgressTintList(getResources().getColorStateList(R.color.bar_green)); 
valorslide.setTextColor(getResources().getColorStateList(R.color.text_green)); 

Старшее "getColorStateList" был

getColorStateList(int id) 

И новый один

getColorStateList(int id, Resources.Theme theme) 

Как использовать переменную Theme? Заранее спасибо

ответ

22

Объект Тема - это тема, которая используется для создания списка состояний цвета. Если вы не используете какую-либо специальных тематизацию с отдельными ресурсами, вы можете либо передать null или текущая тему следующим образом:

TextView valorslide; // initialize 
SeekBar seekBar; // initialize 
Context context = this; 
Resources resources = context.getResources(); 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ 
    seekBar.setProgressTintList(resources.getColorStateList(R.color.bar_green, context.getTheme())); 
    valorslide.setTextColor(resources.getColorStateList(R.color.text_green, context.getTheme())); 
} else { 
    seekBar.setProgressTintList(resources.getColorStateList(R.color.bar_green)); 
    valorslide.setTextColor(resources.getColorStateList(R.color.text_green)); 
} 

Если вы не не заботитесь о теме, вы можете просто передать NULL :

getColorStateList(R.color.text_green, null) 

See the documentation for more explanation. Обратите внимание, что вам нужно только использовать новую версию на API 23 (Android Зефир) и выше.

+2

Или, просто придерживаться устаревшей версии, так как если ваш 'minSdkVersion' 23 или выше, вам нужно будет использовать устаревшую версию на старых устройствах в любом случае. – CommonsWare

+0

@CommonsWare Я должен был указать это, обновленный, чтобы отразить эту информацию. Благодарю. – anthonycr

+0

Я пробовал null раньше, и он разбился. Я попробовал обе вещи сейчас (null и getTheme()), и он по-прежнему сбой '14635-14635/golden.imper.csystemhelper E/MessageQueue-JNI: java.lang.NoSuchMethodError: Нет виртуального метода getColorStateList (ILandroid/content/Рез/Ресурсы $ тема;) Landroid/содержание/Рез/Co lorStateList; в классе Landroid/content/res/Resources; или его суперклассы (объявление «android.content.res.Resources» появляется в /system/framework/framework.jar) ' – fkchaud

36

Пока работает ответ anthonycr, это намного более компактны, чтобы просто написать

ContextCompat.getColorStateList(context, R.color.haml_indigo_blue); 
+1

Это работает классно! Есть ли что-нибудь подобное, но для методов поиска? У меня проблемы с совместимостью (с помощью ответа Энтони) с помощью 'seekBar.setProgressTintList()' (мне это не нужно, это для знания) – fkchaud

+1

Это должно быть принято как ответ :) – Rajesh

+0

как можно сделать 'ColorStateList' из пользовательский цвет, а не цвет ресурса? –

0

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

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