博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android4.4 及以下TextView,Button等控件使用矢量图报错
阅读量:7210 次
发布时间:2019-06-29

本文共 1474 字,大约阅读时间需要 4 分钟。

日常夜拍

1 问题描述

最近项目开发中,图标资源我尽量使用了矢量图,然而配置了基本的兼容设置,程序在低版本中运行还是出现了问题。

xml布局文件中,在TextView中使用矢量图,比如android:drawableStart,android:drawableStart这些属性直接引用矢量图资源。这样在Android5.0及以上是没问题的,但是5.0以下就抛出找不到图片资源的问题。

2 原因

support库并没有为AppcompatTextView,AppcompatButton等控件适配设置矢量图属性,反正我就记得ImageView,ImageButton有srcCompat属性就是适配了的。

3 解决方案

基础配置(必须):

1 在gradle里加上vectorDrawables 兼容支持

android {    ...    defaultConfig {        ...       vectorDrawables.useSupportLibrary = true     }    ...}

2 在Application或者Activity上加上AppCompateDelegate开启CompatVectorFromResources支持

/**     * vector兼容5.0以下系统     */    static {        int currentapiVersion = android.os.Build.VERSION.SDK_INT;        if (currentapiVersion < 21){            //适配android5.0以下            AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);        }    }

方案1:矢量图包装为selector

如果将就Android4.4,Button就不能用矢量图,要用位图,那还叫锤子的兼容支持,我也不知道Google官方为毛不在兼容控件上多加几个支持属性。

参考stackOverFlow的回答,Button,TextView,应用矢量图,保险的是先把矢量图转为selector,然后selector代替矢量图使用,我觉得这是最佳的办法。

例如:

selector_setting.xml

这里android:drawableStart,android:drawableEnd,我引用的是selector,但是selector里面就是一个默认的矢量图,但用这种方式布局,在Android4.4下运行程序就不会报错。

方案2:不支持的就使用位图

如果项目做了大半,突然说之前的矢量图不能用,要改为位图,这是很崩溃的。

4 扩展:为什么我要用矢量图,而不是位图

最常见的设置界面:

我不知道各位实现设置Item的方式是怎样的,我实现UI的原则是能用一个控件实现就用一个实现,所以Item我用一个Button控件就实现了。Button,TextView自带drawableStart属性,可以在上下左右放图标,所以何必要用LinearLayout包三个控件实现呢。

例如:

但是如果drawableStart引用的是位图,这样图标的大小就很难调节,总是要找设计师重新切图,麻烦。但是用vector向量图就可以通过android:width,android:height调大小,这对开发来说很方便。

转载地址:http://ikgum.baihongyu.com/

你可能感兴趣的文章
线程池,这一篇或许就够了
查看>>
angular 指令详解(一)compile与link
查看>>
Avalonia Beta 1对WPF做了很多改进
查看>>
我与前端 | 视野的重要性
查看>>
亚马逊发布用于Amazon Lightsail的托管数据库
查看>>
Uber:大规模系统下如何构建可伸缩的告警生态系统\n
查看>>
Instana发布微服务应用程序样例
查看>>
EOS和MATRIX共识机制对比
查看>>
苹果将iOS应用带入macOS
查看>>
官宣!微软宣布桌面版 Edge将基于Chromium进行开发\n
查看>>
如何学JavaScript
查看>>
挖财架构师:不能从会计角度设计记账App
查看>>
C# 7.3新特性一览
查看>>
.NET Core 2.1 Preview 2带来网络方面的改进
查看>>
又拍云,音视频CDN加速利器
查看>>
Bitbucket Pipelines在Atlassian的Bitbucket云上提供持续交付功能
查看>>
Python数据可视化的10种技能
查看>>
一地鸡毛 OR 绝地反击,2019年区块链发展指南
查看>>
Kafka团队修改KSQL开源许可,怒怼云厂商
查看>>
今夏发布的Terraform 0.12将提供for循环和第一类表达式
查看>>