Glide加载含?attr/color属性的Drawable失败求解决办法
解决Glide加载带主题属性的矢量图失败问题
这个问题我之前也碰到过,核心原因是Glide默认加载矢量图时,没有自动关联当前页面的Theme上下文去解析?attr/xxx这种主题属性,导致无法正确识别对应的颜色值,进而加载失败。下面给你几个实用的解决办法:
方法1:让Glide加载时关联当前主题
直接在RequestOptions中指定当前上下文的主题,让Glide在解析矢量图时能正确解析主题属性:
Glide.with(getContext()) .load(R.drawable.ic_test) .apply(new RequestOptions() .theme(getContext().getTheme()) // 关键:传入当前主题上下文 .transforms(new CenterCrop())) .into(this);
这个方法最直接,不需要额外的转换步骤,让Glide自己完成主题属性的解析。
方法2:提前用AppCompatResources解析Drawable
借助AndroidX的AppCompatResources工具类,先把带主题属性的矢量图解析成已处理好颜色的Drawable,再交给Glide加载:
// 先解析矢量图,此时主题属性已被转换成具体颜色值 Drawable themedDrawable = AppCompatResources.getDrawable(getContext(), R.drawable.ic_test); Glide.with(getContext()) .load(themedDrawable) .apply(new RequestOptions().transforms(new CenterCrop())) .into(this);
这种方式兼容性很好,即使你用的Glide版本对主题属性支持有限,也能正常工作。
额外提示
- 确保你使用的是Glide 4.x及以上版本,旧版本对矢量图和主题属性的支持不完善,升级版本也能解决不少隐性问题。
- 如果你的主题中
black属性对应的颜色有变化,这两种方法都会自动适配当前主题的颜色值,比硬编码@color/black更灵活。
内容的提问来源于stack exchange,提问作者Rasoul Miri
相关产品推荐
相关产品推荐

