ここで問題が発生しています。 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)
Theme変数を使用するにはどうすればよいですか?前もって感謝します
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);
正確に使用している場合、すべてのスタイルが失われます。古いバージョンでは、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;
}
サポートV4ライブラリの一部であるContextCompat.getColor()を使用する必要があります(したがって、以前のすべてのAPIで機能します)。
ContextCompat.getColor(context, R.color.my_color)