web-dev-qa-db-ja.com

Android getResources()。getDrawable()推奨されていないAPI 22

新しいAndroid API 22ではgetResources().getDrawable()は非推奨になりました。今の最善の方法はgetDrawable()だけを使うことです。

何が変わった?

630
Blodhgard

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


A) drawables withテーマの属性

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

あなたの活動テーマが指示するようにスタイル付きDrawableを手に入れるでしょう。これはおそらくあなたが必要としているものです。


B) drawables なしテーマの属性

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

あなたはあなたの様式化されていないドローアブルを古い方法で手に入れるでしょう。注意してください:ResourcesCompat.getDrawable() not です。


EXTRA) drawables withテーマ属性からanother theme

ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);
896
araks

編集: 私のブログ投稿 より完全な説明については主題について/を参照してください。


代わりに、サポートライブラリから次のコードを使用してください。

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では、指定された画面密度/テーマの特定のリソースIDに関連付けられた描画可能オブジェクトを取得できるため、getDrawable(int, Theme)ではなくgetDrawable(int)メソッドを使用する必要があります。廃止予定のgetDrawable(int)メソッドを呼び出すことは、getDrawable(int, null)を呼び出すことと同じです。

730
Alex Lockwood

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

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

編集

ResourcesCompatも廃止されます。しかし、あなたはこれを使用することができます:

ContextCompat.getDrawable(this, R.drawable.your_drawable)(ここでは文脈thisです)

詳細はこのリンクをたどるために: ContextCompat

140
vincent091

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));
}
27
Elenasys

あなたが使用することができます

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

それは私の仕事です

2
Dasser Basyouni

これを試して:

public static List<ProductActivity> getCatalog(Resources res){
    if(catalog == null) {
        catalog.add(new Product("Dead or Alive", res
                .getDrawable(R.drawable.product_salmon),
                "Dead or Alive by Tom Clancy with Grant Blackwood", 29.99));
        catalog.add(new Product("Switch", res
                .getDrawable(R.drawable.switchbook),
                "Switch by Chip Heath and Dan Heath", 24.99));
        catalog.add(new Product("Watchmen", res
                .getDrawable(R.drawable.watchmen),
                "Watchmen by Alan Moore and Dave Gibbons", 14.99));
    }
}
1

ListViewをロードするために配列の問題を修正する方法のほんの一例です。

 mItems = new ArrayList<ListViewItem>();
//    Resources resources = getResources();

//    mItems.add(new ListViewItem(resources.getDrawable(R.drawable.az_lgo), getString(R.string.st_az), getString(R.string.all_nums)));
//    mItems.add(new ListViewItem(resources.getDrawable(R.drawable.ca_lgo), getString(R.string.st_ca), getString(R.string.all_nums)));
//    mItems.add(new ListViewItem(resources.getDrawable(R.drawable.co_lgo), getString(R.string.st_co), getString(R.string.all_nums)));
    mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.az_lgo, null), getString(R.string.st_az), getString(R.string.all_nums)));
    mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.ca_lgo, null), getString(R.string.st_ca), getString(R.string.all_nums)));
    mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.co_lgo, null), getString(R.string.st_co), getString(R.string.all_nums)));
1
Jay

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

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

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

ContextCompat.getDrawable(this, R.drawable.your_drawable_file)
0
Farid Haq

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);
}
0
Ryan Herman

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

context.getDrawable(R.drawable.your_drawable_name)

ドキュメントを参照 /

0
Adeel Ahmad

en api level 14

marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));
0