自定义控件进阶:declare-styleable重用attr

最近接触了Android自定义控件,涉及到自定义xml中得属性(attribute),其实也很简单,但是写着写着,发现代码不完美了,就是在attrs.xml这个文件中,发现属性冗余,于是就想有没有类似属性继承或者include之类的方法.本文将就declare-stylable中属性重用记录一下.

不完美的代码

1 2 3 4 5 6 7 8 9 10 11 12 13

<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="ExTextView"> <attr name="enableOnPad" format="boolean" /> <attr name="supportDeviceType" format="reference"/> </declare-styleable> <declare-styleable name="ExEditText"> <attr name="enableOnPad" format="boolean" /> <attr name="supportDeviceType" format="reference"/> </declare-styleable> </resources>

如上面代码,在ExTextView和ExEditText这个stylable中有着重复的属性申明.虽然上面可以工作,但是总感觉写的不专业,于是寻找优化方法.

这样可以么

尝试着为declare-stylable指定一个parent,如下代码

1 2 3 4 5 6 7 8 9 10 11 12

<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="ExTextView"> <attr name="enableOnPad" format="boolean" /> <attr name="supportDeviceType" format="reference"/> </declare-styleable> <declare-styleable name="ExEditText" parent="ExTextView"> </declare-styleable> </resources>

attrs.xml没有报告语法错误.但是当我使用R.styleable.ExEditText_supportDeviceType时候,R文件却没有生成,重新清理了工程还是不生效,不知道是否为adt插件的问题.其他人也遇到了这样的问题. 这个方法目前是不行的.

终极答案

实际上我们可以在declare-stylable之前,申明要多次使用的属性,在declare-stylable节点内部,只需调用即可.具体代码如下.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="enableOnPad" format="boolean" /> <attr name="supportDeviceType" format="reference"/> <declare-styleable name="ExTextView"> <attr name="enableOnPad"/> <attr name="supportDeviceType"/> </declare-styleable> <declare-styleable name="ExEditText"> <attr name="enableOnPad"/> <attr name="supportDeviceType"/> </declare-styleable> </resources>

每次引用attr后,建议清理一下工程,确保R文件重新生成.

延伸阅读

其他

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏性能与架构

Redis的Lua的功能扩展

Redis支持使用Lua脚步来进行功能扩展,这个能力给Redis带来了更多的应用场景,你可以编写若干命令组合,作为一个小型的非阻塞事务或者更新逻辑 使用脚本的...

37450
来自专栏木头编程 - moTzxx

rsync error(1503)分析:@ERROR: auth failed on module xxxx rsync error: error starting client-server

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

11420
来自专栏后端技术探索

​nginx的配置系统

配置文件中以#开始的行,或者是前面有若干空格或者TAB,然后再跟#的行,都被认为是注释,也就是只对编辑查看文件的用户有意义,程序在读取这些注释行的时候,其实际的...

10720
来自专栏后端技术探索

关于PHP脚本和浏览器连接深入解析

当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击...

22410
来自专栏Django中文社区

登录

用户已经能够在我们的网站注册了,注册就是为了登录,接下来我们为用户提供登录功能。和注册不同的是,Django 已经为我们写好了登录功能的全部代码,我们不必像之前...

93250
来自专栏流柯技术学院

selenium + python自动化测试环境搭建

-------------------------------------------------------------

19020
来自专栏技术博客

Google免费的SVN服务器管理VS2010代码

Google免费为我们提供了代码管理的SVN服务器。首先我这里用的Win7 64的电脑系统,用VS2010进行的代码开发。这里管理代码需要以下准备(现在用的都是...

29010
来自专栏LIN_ZONE

pdf转html插件~~~pdf2htmlEX安装,配置及使用

https://github.com/coolwanglu/pdf2htmlEX/wiki

30440
来自专栏码匠的流水账

java9系列(三)模块系统精要

如果A依赖B,B依赖C,B方法返回的类型是C中的类型,那么需要A也可以使用C,则需要在A中声明依赖C。不过这样子非常费劲,所以java9内置了个transiti...

16620
来自专栏地方网络工作室的专栏

Shell 命令行,实现对若干网站状态批量查询是否正常的脚本

Shell 命令行,实现对若干网站状态批量查询是否正常的脚本 如果你有比较多的网站,这些网站的运行状态是否正常则是一件需要关心的事情。但是逐一打开检查那简直是一...

29480

扫码关注云+社区

领取腾讯云代金券