SVG 兼容以及开发中碰到的坑

Android 5.0发布的时候,Google提供了Vector的支持。Vector Drawable相对于普通的Drawable来说,有以下几个好处:
 -Vector图像可以自动进行适配,不需要通过分辨率来设置不同的图片
 -Vector图像可以大幅减少图像的体积,同样一张图,用Vector来实现,可能只有PNG的几十分之一
 -使用简单,很多设计工具,都可以直接导出SVG图像,从而转换成Vector图像
 -功能强大,不用写很多代码就可以实现非常复杂的动画

 -成熟、稳定,前端已经非常广泛的进行使用了  



具体怎么使用SVG,不多说了,不是重点,重点是使用SVG中的坑,巨坑~


首先,Android5.0发布的SVG,所以向下兼容是一个大问题,不处理这块儿,就会android.content.res.Resources$NotFoundException~

处理这个问题,也要判断你的Gradle版本:

Gradle plugin2.0以上的:

android {
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
    }
}

Gradle plugin2.0以下,1.5以上的:

android {
  defaultConfig {
    // Stops the Gradle plugin’s automatic rasterization of vectors
    generatedDensities = []
  }
  // Flag to tell aapt to keep the attribute ids around
  aaptOptions {
    additionalParameters "--no-version-vectors"
  }
}


除此之外,还有个大坑,前阵子项目整体改UI,底部导航栏我也换成了SVG,因为每个导航都用到了selector选择器,明明我也设置了SVG的兼容,可就是无限报错,最后是在stackoverflow找到了解决办法,google开发人员给出的解释是:

首先,这个功能最初是在23.2.0发布,但是我们发现了一些内存使用和配置更新问题,所以我们在23.3.0移除。23.4.0(技术修复版本)我们已经重新添加相同的功能,但在一个您需要手动启用标志。

具体解决办法就是在你使用的类中添加下面代码:

static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值