web-dev-qa-db-ja.com

getColor(int id)は、Android 6.0 Marshmallow(API 23)では非推奨です。

Resources.getColor(int id)メソッドは非推奨になりました。

@ColorInt
@Deprecated
public int getColor(@ColorRes int id) throws NotFoundException {
    return getColor(id, null);
}

私は何をすべきか?

647
araks

Androidサポートライブラリ23以降
新しい getColor() メソッドがContextCompatに追加されました。

公式のJavaDocからの説明:

特定のリソースIDに関連付けられている色を返します

Mから始めて、返された色は指定されたContextのテーマのためにスタイルされます。


したがって、を呼び出すだけです。

ContextCompat.getColor(context, R.color.your_color);


ContextCompat.getColor()のソースコードはGitHub で確認できます。

1258
araks

tl; dr:

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

説明:

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

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

サポートライブラリをまだ使用していない場合は、アプリ内のdependencies配列に次の行を追加する必要がありますbuild.gradle(注:すでにappcompat(V7)ライブラリを使用している):

compile 'com.Android.support:support-v4:23.0.0' # or any version above

テーマに関心がある場合、ドキュメントには次のように指定されています。

M以降、返される色は、指定されたコンテキストのテーマに合わせてスタイルが設定されます

481
Melvin

getColorだけのサポートライブラリを含めたくないので、次のように使用します。

public static int getColorWrapper(Context context, int id) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        return context.getColor(id);
    } else {
        //noinspection deprecation
        return context.getResources().getColor(id);
    }
}

私はそのコードはうまく動くはずで、廃止予定のgetColorはAPI <23から消えることはできません。

42
Alex Vang

Androidマシュマロでは多くのメソッドが廃止予定です。

たとえば、色を使うには

ContextCompat.getColor(context, R.color.color_name);

描画可能な使い方も

ContextCompat.getDrawable(context, R.drawable.drawble_name);
28

そこにいるすべてのKotlinユーザーのために:

context?.let {
    val color = ContextCompat.getColor(it, R.color.colorPrimary)
    // ...
}
23
Spipau

Drawableのために

ContextCompat.getDrawable(getApplicationContext(),R.drawable.back_arrow)

カラー用

 ContextCompat.getColor(getApplicationContext(),R.color.red)
17
Tarun Voora

あなたが使用することができます:

if (Build.VERSION.SDK_INT >= 23) {
    return ctx.getColor(R.color.YOURCOLOR);
} else {
    return ctx.getRecources().getColor(R.color.YOURCOLOR);
}

Androidマシュマロでテスト済み。出来た。

8
user6765242

最短の答えは:

ContextCompat.getColor(context, R.color.colorAccent);
7
Samira Ekrami

GetColor()メソッドはAPI 23で廃止され、ContextCompatで導入されました。 ContextCompatを使用してgetColor()メソッドを使用する前に、build.gradleスクリプトに依存関係を追加してください。

dependencies{

    // Other stuff

    compile 'com.Android.support:support-v4:23.0.0'
}

それからgetColor()メソッドは次のように使用できます。

int colorcode = ContextCompat.getColor(getApplicationContext(), R.color.your_color);
7
singh.indolia

マルチAPIをサポートするコード

if (Build.VERSION.SDK_INT < 23) {
    view.setBackgroundColor(getResources().getColor(Android.R.color.white));
} else {
    view.setBackgroundColor(getContext().getColor(Android.R.color.white));
}
5
Dmitry

KotlinのRecyclerViewで

inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    fun bind(t: YourObject, listener: OnItemClickListener.YourObjectListener) = with(itemView) {
        textViewcolor.setTextColor(ContextCompat.getColor(itemView.context, R.color.colorPrimary))
        textViewcolor.text = t.name
    }
}
2
Irvin Joao

これを使って:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    return context.getResources().getColor(id, context.getTheme());
} else {
    return context.getResources().getColor(id);
}
2
Trinadh Koya

Android Support LibraryのResourcesCompatgetColor(Resources, int, Theme)メソッドを使用してください。

int white = new ResourcesCompat().getColor(getResources(), R.color.white, null);

ContextCompatについて尋ねるので、私はそれがResourcesgetColor(Context, int)よりあなたの質問をよく反映していると思います。 APIレベル23より前では、テーマは適用されず、メソッドはgetColor(int)を呼び出しますが、非推奨の警告は表示されません。テーマはnullでも構いません。

2
Pedro

Mono/xamarin.Androidでは、私は同じ問題を抱えていて、次のコードは完璧に動作しました:

ContextCompat.GetColor (context, Resource.Color.myColor)

私の場合、コンテキストは私のアクティビティ(Android.Support.V7.App.AppCompatActivity)なので、私の実際の使用例は次のとおりです。

var color = new Android.Graphics.Color(ContextCompat.GetColor(this, Resource.Color.myColor))    
2
Daniele D.

getColor()はマシュマロでは非推奨ですが、代わりのメソッド
getColor(int, Theme)が利用可能です。 ContextCompat.getColor(context, R.color.your_color);の代わりに使えるもの

詳しくは this を参照してください。

1
war_Hero

私もイライラしました。私の必要性は非常に簡単でした。欲しいのはリソースからのARGBカラーだけだったので、簡単な静的メソッドを書きました。

protected static int getARGBColor(Context c, int resId)
        throws Resources.NotFoundException {

    TypedValue color = new TypedValue();
    try {
        c.getResources().getValue(resId, color, true);
    }
    catch (Resources.NotFoundException e) {
        throw(new Resources.NotFoundException(
                  String.format("Failed to find color for resourse id 0x%08x",
                                resId)));
    }
    if (color.type != TYPE_INT_COLOR_ARGB8) {
        throw(new Resources.NotFoundException(
                  String.format(
                      "Resourse id 0x%08x is of type 0x%02d. Expected TYPE_INT_COLOR_ARGB8",
                      resId, color.type))
        );
    }
    return color.data;
}
0
steven smith

リソースが必ずしも必要でない場合は、 parseColor(String) を使用してください。
Color.parseColor("#cc0066")

0
N. Osil

こちらです:

fab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.badge_participants_counter_color)));
0
Joolah

上記のこのメソッドでは:getColor(context、R.color.your_color); 「文脈」をどのように取得するかは明確ではありません。私の場合、Android Studio 3.2ではコンテキストを入れてもうまくいきません。私はこれが私のために働くのを見つけます。 .setTextColor(Color.RED).

0
Harry