You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:44:57