web-dev-qa-db-ja.com

getResources()。getColor()は推奨されていません。

Gradleファイルで:buildToolsVersion "22.0.1"targetSdkVersion 22を使用しています。

有用なgetResources().getColor(R.color.color_name)は推奨されないことがわかりました。

代わりに何を使うべきですか?

320
David

最善の方法は次のようにすることです。

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

これにより、マシュマロ2パラメータ法またはマシュマロ前法が適切に選択されます。

752
Barry Irvine

まあそれはAndroid Mで廃止予定なので、あなたはAndroid M以下のために例外を作らなければなりません。 getColor関数に現在のテーマを追加するだけです。現在のテーマはgetTheme()で取得できます。

これは断片的なトリックをするでしょう、あなたは現在のコンテキストを保持するgetActivity()getBaseContext()yourContextなどに置き換えることができます。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    yourTitle.setTextColor(getActivity().getResources().getColor(Android.R.color.white, getActivity().getTheme()));
}else {
    yourTitle.setTextColor(getActivity().getResources().getColor(Android.R.color.white));
}

* p.s:色はMでは廃止予定ですが、drawableはLでは廃止予定です

39
yfsx

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

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

ドキュメントの中で指定されているように、 "Mで開始すると、返された色は指定されたコンテキストのテーマに合わせてスタイルされます"。 SO心配する必要はありません。

次のコードをアプリのbuild.gradle内のdependencies配列に追加することで、Support V4ライブラリを追加できます。

compile 'com.Android.support:support-v4:23.0.1'
26

便利なgetResources()。getColor(R.color.color_name)は推奨されていません。

ドキュメント によると、API Level 21では非推奨ではありません。

M Developer Previewでは、で非推奨です。ただし、置換メソッド(カラーリソースIDとResources.Themeオブジェクトを受け取る2つのパラメータを持つgetColor())は、M Developer Previewでのみ利用できます。

したがって、今のところ、単一パラメータのgetColor()メソッドを使い続けます。今年後半には、Android Mデバイスで2パラメータgetColor()メソッドを使用することを検討し、古いデバイスでは廃止予定のシングルパラメータgetColor()メソッドに戻ります。

20
CommonsWare