819

新しい Android API 22getResources().getDrawable()では非推奨になりました。最善のアプローチは、 only を使用することですgetDrawable()

何が変わったのですか?

4

16 に答える 16

1241

ロードしているドローアブルの種類に応じて、この非推奨を適切な (および将来の保証) 方法で処理するためのいくつかのオプションがあります。


A)テーマ属性を持つドローアブル

ContextCompat.getDrawable(getActivity(), R.drawable.name);

アクティビティ テーマの指示に従って、スタイル付きの Drawable を取得します。これはおそらくあなたが必要とするものです。


B)テーマ属性のないドローアブル

ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);

スタイルのないドローアブルを古い方法で取得します。注意:ResourcesCompat.getDrawable()推奨ではありません!


EXTRA)別のテーマのテーマ属性を持つドローアブル

ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);
于 2015-03-19T14:13:35.820 に答える
752

編集:より完全な説明については、件名に関する私のブログ投稿を参照してください


代わりに、サポート ライブラリの次のコードを使用する必要があります。

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

このメソッドを使用することは、次を呼び出すことと同じです。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    return resources.getDrawable(id, context.getTheme());
} else {
    return resources.getDrawable(id);
}

API 21 以降では、 のgetDrawable(int, Theme)代わりに メソッドを使用する必要があります。このメソッドを使用getDrawable(int)すると、特定の画面密度/テーマの特定のリソース ID に関連付けられた描画可能オブジェクトをフェッチできるからです。非推奨のgetDrawable(int)メソッドを呼び出すことは、 を呼び出すことと同じgetDrawable(int, null)です。

于 2015-03-13T20:32:35.980 に答える
145

次の行を置き換えます。 getResources().getDrawable(R.drawable.your_drawable)

ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)

編集

ResourcesCompatも現在廃止されています。しかし、これを使用できます:

ContextCompat.getDrawable(this, R.drawable.your_drawable)this(文脈はこちら)

詳細については、このリンクに従ってください: ContextCompat

于 2015-03-18T08:32:09.150 に答える
29

getResources().getDrawable()は API レベル 22 で廃止されました。次に、テーマを追加する必要があります。

getDrawable (int id、Resources.Theme テーマ) (API レベル 21 で追加)

これは例です:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));

これは、以降のバージョンを検証する方法の例です。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));
   } else { 
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage));
}
于 2015-09-29T21:25:46.647 に答える
3

使用できます

ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);

それは私のための仕事です

于 2016-12-26T04:36:32.037 に答える
1

SDK > 21 (lollipop または 5.0) をターゲットにしている場合は、

context.getDrawable(R.drawable.your_drawable_name)

ドキュメントを見る

于 2018-09-24T20:21:03.627 に答える
0

en api レベル 14

marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));
于 2018-01-20T16:46:16.213 に答える
0

今、あなたはこのように実装する必要があります

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21
        //
    } else {
        //
    }

次の 1 行のコードで十分です。ContextCompat.getDrawable によってすべて処理されます。

ContextCompat.getDrawable(this, R.drawable.your_drawable_file)
于 2019-03-01T04:20:10.837 に答える
-2

Build.VERSION_CODES.LOLLIPOP を BuildVersionCodes.Lollipop に変更する必要があります。

if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) {
    this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder, Context.Theme);
} else {
    this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder);
}
于 2015-12-02T01:06:11.707 に答える