getColorStateList已被弃用

我在这里遇到了问题。 我刚刚从sdk 22更新到23,并且不推荐使用以前版本的“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) 

我如何使用Themevariables? 提前致谢

Theme对象是用于设置颜色状态列表样式的主题。 如果您没有对个别资源使用任何特殊主题,您可以传递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) 

有关更多说明,请参阅文档。 请注意,您只需要在API 23(Android Marshmallow)及更高版本上使用新版本。

虽然anthonycr的答案有效,但只需编写就可以更加紧凑

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

您需要使用ContextCompat.getColor(),它是Support V4库的一部分(因此它适用于所有以前的API)。

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

确切地说,如果你使用它们,你将失去所有风格。 对于旧版本,您应该动态创建ColorStateList ,这是保留样式的主要机会。

这适用于所有版本

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