关于Binary XML file ... invalid drawable tag vector报错问题

由于项目中用到了svg矢量图,在部分低版本的手机中遇到布局文件无法解析的异常记录

出现问题的手机是4.4.2的华为荣耀6,在此之前用svg图都没出现崩溃问题,由于svg图都是在xml中设置的,没涉及到代码设置svg图片。网上说的在Activity的oncreate中加入如下代码AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 也尝试过依旧崩溃,看代码是用于在代码中设置图片。

出现时的情况

     1 gradle版本3.0.1

     2 项目的Gradle配置文件的 defaultConfig属性有配置 vectorDrawables.useSupportLibrary = true

     3 引用的库中有support:animated-vector-drawable库引用

 

确认不是环境问题,也尝试过网上流传的升级编译版本啊啥的各种依旧无效。后来发现textView中有这种 drawableLeft,并且里面设置的是svg的图片,然后在activity中设置AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)也是无效的。

然后尝试直接用一个Img来加载这个图,设置 app:srcCompat="..."这个属性完美解决,由于SVG矢量图限于Lollipop已经更高版本使用, 低版本需要兼容使用,app:srcCompat就是兼容加载svg图片的方式

先看TextView中的Draw中的部分代码:
// IMPORTANT: The coordinates computed are also used in invalidateDrawable()
// Make sure to update invalidateDrawable() when changing this code.
if (dr.mShowing[Drawables.LEFT] != null) {
    canvas.save();
    canvas.translate(scrollX + mPaddingLeft + leftOffset,
            scrollY + compoundPaddingTop + (vspace - dr.mDrawableHeightLeft) / 2);
    dr.mShowing[Drawables.LEFT].draw(canvas);
    canvas.restore();
} 
里面是直接调用的drawable的draw方法
在AppCompatImageView中截取的一段如下
 

 

最终会执行到这里修复svg的兼容问题, 然而textView中的drawable是直接draw没有修复过的,所以在使用中 一定要注意不要在textView中为了简便而直接在xml中设置svg图片

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值