新しいandroid API 22 getResources().getDrawable()
で非推奨になりました。現在、最善の方法はのみを使用することですgetDrawable()
。
何が変わったの?
新しいandroid API 22 getResources().getDrawable()
で非推奨になりました。現在、最善の方法はのみを使用することですgetDrawable()
。
何が変わったの?
回答:
ロードしているドローアブルの種類に応じて、この非推奨を正しい(そして将来の証明)方法で処理するためのいくつかのオプションがあります。
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);
代わりに、サポートライブラリの次のコードを使用してください。
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)
です。
getDrawable (int id)
はContext
クラスのメソッドも指すと思います。これはgetResources().getDrawable(id, getTheme());
新しいAPIと同じで、新しいAPIを使用しています。
getDrawable(int, Resources.Theme)
。
この行を置き換えます:
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));
}
Build.VERSION_CODES.LOLLIPOP is API 21
、これはそうではありませんif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
かif (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
?気にしないで。以下から「メソッドはAPI 21で追加されましたが、API 22までは非推奨ではありませんでした。:)」
使用できます
ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);
それは私にとっては仕事です
配列の問題を修正して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)));
これを試して:
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));
}
}
getDrawable(int drawable)は、APIレベル22で廃止されました。参照については、このリンクを参照してください。
この問題を解決するには、次のようにIDとともに新しいコンストラクターを渡す必要があります。
getDrawable(int id, Resources.Theme theme)
ソリューションの場合、次のようにします:-
Javaの場合:-
ContextCompat.getDrawable(getActivity(), R.drawable.name);
または
imgProfile.setImageDrawable(getResources().getDrawable(R.drawable.img_prof, getApplicationContext().getTheme()));
コトリンでは:-
rel_week.background=ContextCompat.getDrawable(this.requireContext(), R.color.colorWhite)
または
rel_day.background=resources.getDrawable(R.drawable.ic_home, context?.theme)
これがあなたに役立つことを願っています。
en apiレベル14
marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));
Kotlinでは拡張機能を使用できます
fun Context.getMyDrawable(id : Int) : Drawable?{
return ContextCompat.getDrawable(this, id)
}
それから
context.getMyDrawable(R.drawable.my_icon)
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);
}
BuildVersionCodes
Xamarinに固有のクラスではありませんか?
getDrawable (int id)
クラスのメソッドResources
が廃止されているのは当然です。ここgetDrawable (int id, Resources.Theme theme)
で、新しいテーマパラメータを使用してメソッドを使用する必要があります。