theme textappearance style studio gratis developer apptheme android android-theme

textappearance - themes android gratis



getColorStateList ha quedado en desuso (4)

Estoy teniendo un problema aquí. Acabo de actualizar de sdk 22 a 23, y la versión anterior de "getColorStateList ()" ha quedado en desuso.

Mi codigo era asi

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

El antiguo "getColorStateList" era

getColorStateList(int id)

Y el nuevo es

getColorStateList(int id, Resources.Theme theme)

¿Cómo uso la variable Theme? Gracias por adelantado


Debe usar ContextCompat.getColor (), que forma parte de la biblioteca de soporte V4 (por lo que funcionará para todas las API anteriores).

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


El objeto Tema es el tema que se utiliza para diseñar la lista de estados de color. Si no está utilizando una temática especial con recursos individuales, puede pasar el null o el tema actual de la siguiente manera:

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)); }

Si no te importa el tema, puedes pasar null:

getColorStateList(R.color.text_green, null)

Vea la documentación para más explicación. Tenga en cuenta que solo necesita usar la nueva versión en API 23 (Android Marshmallow) y superior.


Exactamente si los estás usando, perderás todos los estilos. Para una versión anterior, debe crear ColorStateList dinámicamente. Esta es la oportunidad principal para mantener sus estilos.

esto funciona para todas las versiones

layout.setColorStateList(buildColorStateList(this, R.attr.colorPrimaryDark, R.attr.colorPrimary) ); public ColorStateList buildColorStateList(Context context, @AttrRes int pressedColorAttr, @AttrRes int defaultColorAttr){ int pressedColor = getColorByAttr(context, pressedColorAttr); int defaultColor = getColorByAttr(context, defaultColorAttr); return new ColorStateList( new int[][]{ new int[]{android.R.attr.state_pressed}, new int[]{} // this should be empty to make default color as we want }, new int[]{ pressedColor, defaultColor } ); } @ColorInt public static int getColorByAttr(Context context, @AttrRes int attrColor){ if (context == null || context.getTheme() == null) return -1; Resources.Theme theme = context.getTheme(); TypedValue typedValue = new TypedValue(); theme.resolveAttribute(attrColor, typedValue,true); return typedValue.data; }


Si bien la respuesta de anthonycr funciona, es mucho más compacto simplemente escribir

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