web-dev-qa-db-ja.com

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)

Theme変数を使用するにはどうすればよいですか?前もって感謝します

21
fkchaud

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)以上で新しいバージョンを使用するだけです。

26
anthonycr

Anthonycrの答えは機能しますが、書くだけの方がはるかにコンパクトです

ContextCompat.getColorStateList(context, R.color.haml_Indigo_blue);
43
user1354603

正確に使用している場合、すべてのスタイルが失われます。古いバージョンでは、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;
} 
0
Vahe Gharibyan

サポートV4ライブラリの一部であるContextCompat.getColor()を使用する必要があります(したがって、以前のすべてのAPIで機能します)。

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