Android:context.getDrawable()の代替


84

私はcontext.getDrawable()私のプロジェクトでこのように使用しました:

Drawable greenProgressbar = context.getDrawable(R.drawable.custom_progressbargreen);

しかし、Eclipseは私にそれが必要であるというエラーを与えていますMinimum API level of 21。これは、グーグルですばやく検索した後、私のアプリはでのみ使用できることを意味しAndroid 5.0ます。すべてのデバイスがこのバージョンのAndroidを使用しているわけではないので、の代替手段が必要context.getDrawable()です。

回答:


201

SDK 22のドキュメントによると、以前に受け入れられていた方法は非推奨になりました。

android.os.Build.VERSION_CODES#JELLY_BEANより前は、ここで渡されたリソースIDが別のDrawableリソースのエイリアスである場合、この関数は最終的な構成密度を正しく取得しませんでした。これは、エイリアスリソースの密度構成が実際のリソースと異なる場合、返されるDrawableの密度が不正確になり、スケーリングが不適切になることを意味します。

この回答で指摘されているようにより良い解決策はContextCompatを使用することです。 ContextCompat.getDrawable(context, R.drawable.***)


1
より関連性があるので、私は今この答えを受け入れました:)
Bram 2015年

26

getResources()コンテキストの後にを追加してみてください。

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);

動作するはずです。


4
Resources.getDrawableは非推奨になり、Context.getDrawableが優先されました
Joe Bowbeer 2015

12

私は、現在非推奨になっているgetDrawable()メソッドを参照したかったのと同じ状況にありました。

私が使ったもの、

myButton.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_btn_off));

これがお役に立てば幸いです


9

私は以前に同様の問題を抱えていました。あなたはこのようにそれをやろうとしましたか?

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);

これは非推奨です。
タスリムオセニ

2

これを試して:

AppCompatResources.getDrawable(context, R.drawable.*)

1

「getDrawable(id、this.getTheme())」を使用する必要があります。このメソッドは現在まで非推奨ではありません。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    view.setBackground(getResources().getDrawable(R.drawable.radioline,this.getTheme()));
} else {
   view.setBackground(getResources().getDrawable(R.drawable.radioline));
}

1

ContextCompact.getDrawable(Context context、int resID)を使用することに同意します。それは私のために働き、私のアプリはAPI19をターゲットにしています。


1

ドローアブル(Kotlin)を使用せずに、リソースを直接設定することもできます。

btn.setImageResource(R.drawable.ic_XXX)

1

Kotlinプログラマー向けのソリューションは次のようになります。

val greenProgressbar = context!!.getDrawable(R.drawable.custom_progressbargreen)

または(API 22から)

val greenProgressbar = ContextCompat.getDrawable(R.drawable.custom_progressbargreen)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.