Android Studio中如何将Drawable目录图片作为Drawable访问并解决ImageView设置图片的类型不匹配问题
解决ImageView设置Drawable资源的问题
嘿,这个问题我之前开发Android应用时也碰到过,其实有两种简单的解决方式,看你的需求来选:
方式一:直接用setImageResource()(最推荐)
ImageView专门提供了接收资源ID的方法,不用额外转换Drawable,代码直接写:
pic.setImageResource(R.drawable.image_name);
这个方法会帮你自动把资源ID转换成对应的Drawable对象,省心又简洁,日常开发里用这个最多。
方式二:把资源ID转为Drawable对象后用setImageDrawable()
如果你确实需要用到setImageDrawable()方法(比如要对Drawable做额外处理,比如修改颜色、调整缩放等),那可以通过资源ID获取Drawable实例,分两种场景:
场景1:兼容Android API 21及以上
在Activity里可以这样写:
Drawable drawable = getResources().getDrawable(R.drawable.image_name, getTheme()); pic.setImageDrawable(drawable);
如果是在Fragment里,记得用requireContext()获取上下文:
Drawable drawable = requireContext().getResources().getDrawable(R.drawable.image_name, requireContext().getTheme()); pic.setImageDrawable(drawable);
场景2:兼容所有API级别(推荐用这个)
如果你的项目用了AppCompat库(大部分Android项目都会依赖),可以用AppCompatResources来获取跨版本兼容的Drawable:
// Activity中 Drawable drawable = AppCompatResources.getDrawable(this, R.drawable.image_name); // Fragment中 Drawable drawable = AppCompatResources.getDrawable(requireContext(), R.drawable.image_name); pic.setImageDrawable(drawable);
为什么你之前的代码报错?
因为R.drawable.image_name返回的是整数类型的资源ID,而setImageDrawable()方法要求传入的是Drawable类的实例,二者类型不匹配,所以要么用专门处理资源ID的setImageResource(),要么先把ID转换成Drawable对象再传入。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

