我有一个图像res/drawable/test.png (R.drawable.test)。 我想把这个图像传递给一个接受Drawable的函数,例如mButton.setCompoundDrawables()。
那么如何将图像资源转换为Drawable呢?
我有一个图像res/drawable/test.png (R.drawable.test)。 我想把这个图像传递给一个接受Drawable的函数,例如mButton.setCompoundDrawables()。
那么如何将图像资源转换为Drawable呢?
当前回答
我只是想补充一点,如果你在使用getDrawable(…)时得到“deprecated”消息,你应该使用支持库中的以下方法。
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]);
}
这适用于前和后棒棒糖版本。
其他回答
getDrawable (int id)方法自API 22起已弃用。
相反,你应该使用getDrawable (int id, Resources。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);
}
在Kotlin中,你可以这样做:
binding.floatingActionButton.setImageDrawable(
AppCompatResources.getDrawable(this, android.R.drawable.ic_delete))
其中绑定是根视图,这是指上下文,你需要导入
import androidx.appcompat.content.res.AppCompatResources
从vector资源中获取Drawable,不管它是否是vector:
AppCompatResources.getDrawable(context, R.drawable.icon);
注意: ContextCompat。getDrawable(上下文,R.drawable.icon);将生成android.content.res。vector资源$NotFoundException
你的Activity应该有getResources方法。做的事:
Drawable myIcon = getResources().getDrawable( R.drawable.icon );
在API版本21中,此方法已弃用,可以用以下方法替代:
Drawable myIcon = AppCompatResources.getDrawable(context, R.drawable.icon);
如果你需要指定一个自定义主题,下面将应用它,但仅当API版本为21或更高:
Drawable myIcon = ResourcesCompat.getDrawable(getResources(), R.drawable.icon, theme);
我只是想补充一点,如果你在使用getDrawable(…)时得到“deprecated”消息,你应该使用支持库中的以下方法。
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]);
}
这适用于前和后棒棒糖版本。