画像がありますres/drawable/test.png
(R.drawable.test)。
この画像をDrawable
、たとえばを受け入れる関数に渡したいのですがmButton.setCompoundDrawables()
。
では、どうすれば画像リソースをに変換できDrawable
ますか?
画像がありますres/drawable/test.png
(R.drawable.test)。
この画像をDrawable
、たとえばを受け入れる関数に渡したいのですがmButton.setCompoundDrawables()
。
では、どうすれば画像リソースをに変換できDrawable
ますか?
回答:
アクティビティにはメソッドgetResourcesが必要です。行う:
Drawable myIcon = getResources().getDrawable( R.drawable.icon );
このコードは廃止されました:
Drawable drawable = getResources().getDrawable( R.drawable.icon );
代わりにこれを使用してください:
Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);
ResourcesCompat.getDrawable(getResources(), R.drawable.icon, null);
(3番目のパラメーターはオプションのThemeインスタンスです)。
このgetDrawable (int id)
メソッドは、API 22で非推奨になりました。
代わりにgetDrawable (int id, Resources.Theme theme)
for API 21+を使用する必要があります
コードは次のようになります。
Drawable myDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
myDrawable = context.getResources().getDrawable(id, context.getTheme());
} else {
myDrawable = context.getResources().getDrawable(id);
}
getResources().getDrawable(R.drawable.ic_warning_80dp, context?.theme)
getDrawable(...)を使用しているときに「非推奨」メッセージが表示される場合は、代わりにサポートライブラリの次のメソッドを使用する必要があることを追加します。
ContextCompat.getDrawable(getContext(),R.drawable.[name])
このメソッドを使用する場合、getResources()を使用する必要はありません。
これは次のようなことをするのと同じです
Drawable mDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
mDrawable = ContextCompat.getDrawable(getContext(),R.drawable.[name]);
} else {
mDrawable = getResources().getDrawable(R.id.[name]);
}
これは、Lollipopの前バージョンと後バージョンの両方で機能します。
画像が設定されているビューからドローアブルを取得しようとしている場合、
ivshowing.setBackgroundResource(R.drawable.one);
その後、ドロアブルは次のコードでnull値のみを返します...
Drawable drawable = (Drawable) ivshowing.getDrawable();
したがって、特定のビューからドローアブルを取得する場合は、次のコードを使用して画像を設定することをお勧めします。
ivshowing.setImageResource(R.drawable.one);
そうして初めて、ドローアブルは正確に変換されます。
フラグメントから継承する場合は、次のことができます。
Drawable drawable = getActivity().getDrawable(R.drawable.icon)