Android5.0以下drawable tag vector错误的解决办法

在Androi 5.0以下的设备可能会报这样的错误:

Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #1: invalid drawable tag vector

解决思路:

1、首先检查兼容性环境配置是否正确,判断是否是环境配置的问题导致出现以上问题的,如果是,请配置好环境,如果不是
请看步骤2

兼容性环境的配置:

(1)首先在使用时,我们需要添加依赖:

compile 'com.android.support:support-vector-drawable:26.1.0'

compile 'com.android.support:appcompat-v7:26.1.0'

(2)打开该模块下的build.gradle文件:

  • 如果当前使用的gradle版本为2.0以上,在android节点下的defaultConfig节点下加入一行代码
vectorDrawables.useSupportLibrary = true
  • 如果使用的gradle版本为2.0以下,1.5以上,则需要在android节点下的defaultConfig节点下加入如下一行代码:
generatedDensities = []

并在android节点下,defaultConfig节点后面加入

aaptOptions {
additionalParameters "--no-version-vectors"
}

(3) 修改布局文件app:srcCompat="@drawable/ic_egg05_got"

(4) 在Activity的oncreate中加入如下代码即可: AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);

2、判断不是兼容性环境配置的问题,检查使用的控件

(1) ImageView,如果加载vector drawable资源的Activity是继承自AppCompatActivity,xml使用ImageView,否则xml中使用AppCompatImageView
,同时android:src=" ";由app:srcCompat=" ";替代

(2)当在非ImageView控件中(Button、TextView等)作为Background、CompoundDrawable时,需要在Activity中加入以下声明:

static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

另外,如果直接在xml布局文件中使用,则必须使用selector、layer-list这种容器包裹起来,不能直接使用 (在代码中设置不需要)

例如:

selector_drawable文件

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="30dp"
android:height="30dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#cccccc"
android:pathData="M8.59,16.34l4.58,-4.59 -4.58,-4.59L10,5.75l6,6 -6,6z"/>
<!--android:fillColor="#FFC7C7CC"--> </vector>

selsetor文件

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/selector_drawable"/>
</layer-list>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/selector_drawable"/>
</selector>

xml文件(以Button为例,其他控件正常替换即可)

<Button
android:id="@+id/radioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Button"
android:textSize="@dimen/text_size_20"
android:drawableRight="@drawable/selector"
/>

(3)若TextView,我们还可以通过重写TextView解决android5.0以下机型崩溃问题,因为AppCompatTextView是没有对CompoundDrawable进行适配的,如果直接使用android:drawableRight=" "等属性加载矢量图,Android5.0以下的
机型可能会出现崩溃,我们需要重写TextView以及它的相关属性。可以参考https://github.com/woxingxiao/VectorCompatTextView重写TextView

最新文章

  1. TCPIP、Http、Socket的协议~ 写得挺形象,赞
  2. [每日一记] Python报错 IndentationError: unexpected indent
  3. fastq-dump 报错 解决方案
  4. angular指令深度学习篇
  5. Git入门仅这篇就够了
  6. Android抓包方法(一)之Fiddler代理
  7. ecshop绕过验证码暴力破解
  8. 十步让 WebForm项目 变为 Mvc项目
  9. (转载)ETL利器Kettle实战应用解析系列一【Kettle使用介绍】
  10. 零基础编程指南(By Turtle)
  11. c#中var关键字用法
  12. 转:MVC分页
  13. 【转】网络视频监控P2P解决方案
  14. hdu 1387 Team Queue (链表)
  15. BZOJ 1324 Exca神剑 最小割
  16. centos无网络问题
  17. Angular ContentChild
  18. Oracle 冷备份详解【实战案例】
  19. 算法语言Scheme修订6报告 R6RS简体中文翻译
  20. 【bzoj1602】[Usaco2008 Oct]牧场行走

热门文章

  1. stm32 ds18b20 温度传感器
  2. linux c 错误的捕获
  3. C# 设置鼠标光标位置
  4. Anaconda查找源及配置清华镜像
  5. ubuntu下编辑文本命令
  6. js重写页面之后后台如何获取重写后的控件值
  7. FastDFS-基本介绍
  8. python3爬虫系列19之反爬随机 User-Agent 和 ip代理池的使用
  9. 03_已解决 [salt.master :2195][ERROR ][6219] Failed to allocate a jid. The requested returner &#39;mysql&#39; could not be loaded.
  10. 解决每次执行Java等命令时都要重新source /etc/profile后才能执行,否则找不到命令