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

Android矢量资源(Vector Asset)在API23设备无法显示的解决咨询

解决Vector Asset在Android 6.0.1(API23)无法显示的问题

我之前也碰到过一模一样的情况——明明开了vectorDrawables.useSupportLibrary = true,API27能正常显示,API23却直接空白。试试下面这几个排查步骤,大概率能解决:

  • 替换布局中的android:src为app:srcCompat
    低版本系统没法通过原生android:src正确解析矢量图,必须用support库提供的app:srcCompat属性。记得先在布局根节点添加命名空间:

    xmlns:app="http://schemas.android.com/apk/res-auto"
    

    然后修改ImageView的引用方式:

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/your_vector_icon" />
    
  • 全局开启矢量图兼容开关
    在你的Application类的onCreate()方法里加一行代码,确保整个App都能正确识别矢量资源:

    @Override
    public void onCreate() {
        super.onCreate();
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
    }
    

    要是没自定义Application,也可以在每个用到矢量图的Activity里加,但全局配置更省心。

  • 补全build.gradle的兼容配置
    除了vectorDrawables.useSupportLibrary = true,如果你的Android Gradle Plugin版本低于3.0,还得加个aapt参数禁用矢量图的版本标记:

    android {
        defaultConfig {
            vectorDrawables.useSupportLibrary = true
        }
    
        aaptOptions {
            additionalParameters "--no-version-vectors"
        }
    }
    

    另外建议把compileSdkVersion和targetSdkVersion升到28以上,更高的版本对矢量图兼容性更完善。

  • 检查矢量图代码的语法细节
    看你贴的矢量图代码,android:strokeWidth = "1"这里有多余空格,虽然XML语法允许,但低版本解析器可能对这种格式敏感。建议改成:

    android:strokeWidth="1"
    

    也可以用Android Studio的Vector Asset工具重新导出一遍图标,确保pathData里的路径命令都是兼容低版本的标准格式。

  • 代码中加载时用ContextCompat
    如果是动态设置图标,别用getResources().getDrawable(),改用ContextCompat.getDrawable():

    imageView.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.your_vector_icon));
    

    或者直接用AppCompatImageView替代原生ImageView,它对矢量图的支持更友好。

按这个顺序排查下来,应该就能解决API23上的显示问题了。

内容的提问来源于stack exchange,提问作者porthfind

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:55:48