关于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图片