• Android5.0以下drawable tag vector错误的解决办法(转发)


    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

  • 相关阅读:
    【python-leetcode107-树的宽度遍历】二叉树的层次遍历Ⅱ
    Spring依赖
    Dubbo依赖
    免费内网穿透
    Oracle分析函数Over()
    测压工具
    编译器版本
    修改gridfilters.js源码,往后台多传递一个参数,并设置NumericFilter、StringFilter默认提示信息
    网站10分钟不操作会话退出
    win10彻底关闭windows defender,解决无故占用大量CPU问题
  • 原文地址:https://www.cnblogs.com/mamamia/p/11281040.html
Copyright © 2020-2023  润新知