web-dev-qa-db-ja.com

Android:context.getDrawable()の代替

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

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

しかし、EclipseはMinimum API level of 21を必要とするエラーを私に与えています。これは、クイックGoogle検索後、APPがAndroid 5.0でのみ使用できることを意味します。すべてのデバイスがこのバージョンのAndroidを使用しているわけではないので、context.getDrawable()の代替品が必要です。

75
Bram

SDK 22のドキュメントによると、以前に受け入れられていた方法は廃止されました。

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

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

185
user2417480

コンテキストの後にgetResources()を追加してみてください。これは次のとおりです。

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

動作するはずです。

24
glm9637

私はgetDrawable()メソッドを参照したいのと同じ状況にありましたが、これは現在では非推奨です。

私が使用したもの、

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

これがあなたを助けることを願っています

9
Umanda

以前にも同様の問題がありました。このようにしてみましたか?

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

「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));
}
0
Maulik Baraiya

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