Resources.getColor(int id)
メソッドは非推奨になりました。
@ColorInt
@Deprecated
public int getColor(@ColorRes int id) throws NotFoundException {
return getColor(id, null);
}
私は何をすべきか?
Androidサポートライブラリ23以降
新しい getColor() メソッドがContextCompat
に追加されました。
公式のJavaDocからの説明:
特定のリソースIDに関連付けられている色を返します
Mから始めて、返された色は指定されたContextのテーマのためにスタイルされます。
したがって、はを呼び出すだけです。
ContextCompat.getColor(context, R.color.your_color);
ContextCompat.getColor()
のソースコードはGitHub で確認できます。
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以降、返される色は、指定されたコンテキストのテーマに合わせてスタイルが設定されます
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から消えることはできません。
Androidマシュマロでは多くのメソッドが廃止予定です。
たとえば、色を使うには
ContextCompat.getColor(context, R.color.color_name);
描画可能な使い方も
ContextCompat.getDrawable(context, R.drawable.drawble_name);
そこにいるすべてのKotlinユーザーのために:
context?.let {
val color = ContextCompat.getColor(it, R.color.colorPrimary)
// ...
}
Drawableのために
ContextCompat.getDrawable(getApplicationContext(),R.drawable.back_arrow)
カラー用
ContextCompat.getColor(getApplicationContext(),R.color.red)
あなたが使用することができます:
if (Build.VERSION.SDK_INT >= 23) {
return ctx.getColor(R.color.YOURCOLOR);
} else {
return ctx.getRecources().getColor(R.color.YOURCOLOR);
}
Androidマシュマロでテスト済み。出来た。
最短の答えは:
ContextCompat.getColor(context, R.color.colorAccent);
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);
マルチAPIをサポートするコード
if (Build.VERSION.SDK_INT < 23) {
view.setBackgroundColor(getResources().getColor(Android.R.color.white));
} else {
view.setBackgroundColor(getContext().getColor(Android.R.color.white));
}
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
}
}
これを使って:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return context.getResources().getColor(id, context.getTheme());
} else {
return context.getResources().getColor(id);
}
Android Support LibraryのResourcesCompat
のgetColor(Resources, int, Theme)
メソッドを使用してください。
int white = new ResourcesCompat().getColor(getResources(), R.color.white, null);
ContextCompat
について尋ねるので、私はそれがResources
のgetColor(Context, int)
よりあなたの質問をよく反映していると思います。 APIレベル23より前では、テーマは適用されず、メソッドはgetColor(int)
を呼び出しますが、非推奨の警告は表示されません。テーマはnull
でも構いません。
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))
getColor()
はマシュマロでは非推奨ですが、代わりのメソッドgetColor(int, Theme)
が利用可能です。 ContextCompat.getColor(context, R.color.your_color);
の代わりに使えるもの
詳しくは this を参照してください。
私もイライラしました。私の必要性は非常に簡単でした。欲しいのはリソースからの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;
}
リソースが必ずしも必要でない場合は、 parseColor(String)
を使用してください。Color.parseColor("#cc0066")
こちらです:
fab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.badge_participants_counter_color)));
上記のこのメソッドでは:getColor(context、R.color.your_color); 「文脈」をどのように取得するかは明確ではありません。私の場合、Android Studio 3.2ではコンテキストを入れてもうまくいきません。私はこれが私のために働くのを見つけます。 .setTextColor(Color.RED).