导读:前言某日(其实就是今日。。。),在我将一个大需求做完以后,合并到了 master,一看改动文件,96 个,大呼爽。因为改的文件太多,担心出问题,于是 build 一下,然后就出错了。。。错误如下所示:activity_blink.xml:8
某日(其实就是今日。。。),在我将一个大需求做完以后,合并到了 master,一看改动文件,96 个,大呼爽。因为改的文件太多,担心出问题,于是 build 一下,然后就出错了。。。
错误如下所示:
activity_blink.xml:8: error: Error: String types not allowed (at 'extraScaleType' with value 'matchWidthTopCrop').
看了下代码,这个 extraScaleType 是一个自定义控件的属性,是个枚举类型,matchWidthTopCrop 是其中的一个值,于是翻了翻 attrs 定义,乍一看没啥问题啊。。。
自定义属性定义:
<declare-styleable name="CustomCropImageView">
自定义属性使用:
上述是我们 App 中 res/values/attrs.xml 文件的定义,这还能有错儿?百思不得其姐。。。
首先我在 StackOverflow 看到了这个:Custom enum attribute gives error String types not allowed。
这个问题下面就俩回答:一个说可能是 namespace 的问题,我检查了下,使用的默认的 app 的 namespace,没啥问题 xmlns:app="http://schemas.android.com/apk/res-auto"。而另一个,说是要把在 declare-styleable 内部声明的 attr 属性放到和 declare-styleable 同级的后头,实际上也没啥用。。。
事情一度陷入了江局。
然后,我看到了这个:Error: Attribute "style" has already been defined。这个 issue 讲的是啥呢,就是说 color.xml 里的一个颜色定义重复了,然后就报错了,然后项目的维护者建议是属性定义最好加前缀,免得属性冲突。
这个时候我一拍脑门儿,哎?!!!我们项目不就经常这样吗!!!我之前也遇到过。因为开发不规范,SDK 属性定义没加前缀,导致各种冲突的事情已经屡见不鲜了。这次的问题说不定就是属性被覆盖了。。。
于是,我全局搜索这个 extraScaleType,果不其然,在 build/intermediates/res/merged/official/debug/values/values.xml 中,搜索到了这个 extraScaleType,哎哟我去,它长这 AC 样:
<declare-styleable name="CustomCropImageView">
发现没,少了一行
一时间,真相大白。
知道原因就好办了,把 App 里的属性删掉,在 SDK 里加上这个自定义属性就 OK 了,当然,这只是临时解决方案,后续会把这些个自定义控件(属性)放到基础 UI 库里。
这个小问题大概耽误了我俩小时,感觉有点儿亏,吃一堑长一智吧。
总结:以上内容就是对于中国农业银行证书枚举控件,的详细介绍,文章内容部分转载自互联网,希望对您了解中国农业银行证书枚举控件有帮助和参考的价值。