新しいAndroid API 22ではgetResources().getDrawable()
は非推奨になりました。今の最善の方法はgetDrawable()
だけを使うことです。
何が変わった?
ロードするドロアブルの種類に応じて、この非推奨を正しい方法(および 将来の保証 )で処理するためのオプションがいくつかあります。
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);
代わりに、サポートライブラリから次のコードを使用してください。
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)
を呼び出すことと同じです。
この行を置き換えます。getResources().getDrawable(R.drawable.your_drawable)
ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)
と
編集
ResourcesCompat
も廃止されます。しかし、あなたはこれを使用することができます:
ContextCompat.getDrawable(this, R.drawable.your_drawable)
(ここでは文脈this
です)
詳細はこのリンクをたどるために: ContextCompat
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));
}
あなたが使用することができます
ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);
それは私の仕事です
これを試して:
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));
}
}
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)));
今、あなたはこのように実装する必要があります
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) { //>= API 21
//
} else {
//
}
1行のコードで十分ですが、ContextCompat.getDrawableによってすべての処理が行われます。
ContextCompat.getDrawable(this, R.drawable.your_drawable_file)
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);
}
en api level 14
marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));