自定义view 读取 属性No resource identifier found for attribute
发布日期:2021-09-30 11:34:35 浏览次数:8 分类:技术文章

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

首先看一个错误
error: No resource identifier found for attribute '' in package

这个错误主要原因是

属性不存在(注意属性区分大小写)

其中xmlns必须写, 

 
不写的话读取不到属性值,如下所示 error虽然编译成功,但是取不到值

 

还需要注意一个问题,如果命名空间采用老式写法

xmlns最后面是res/app的包名. 而不是v自定义的iew所在的package的路径 

xmlns:app="http://schemas.android.com/apk/res/com.package.name.view"
这么写是错误的

。。。。。

完整用法如下(注意查看一下顺序)

TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.LinearLayoutWithLine);		paddlingLineLeft = (int) ta.getDimension(R.styleable.LinearLayoutWithLine_paddingLineLeft, getPaddingLeft());		paddlingLineTop = (int) ta.getDimension(R.styleable.LinearLayoutWithLine_paddingLineTop, getPaddingTop());		paddlingLineRight = (int) ta.getDimension(R.styleable.LinearLayoutWithLine_paddingLineRight, getPaddingRight());		paddlingLineBottom = (int) ta.getDimension(R.styleable.LinearLayoutWithLine_paddingLineBottom, getPaddingBottom());		ta.recycle();
ta.getDimension 的第一个参数是下标 

public static final int LinearLayoutWithLine_lineColor = 0; public static final int LinearLayoutWithLine_paddingLineLeft = 1; public static final int LinearLayoutWithLine_paddingLineTop = 2;

值按照declare-styleable定义的LinearLayoutWithLine中的顺序累加的

所以 取值也可以写成下列

TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.LinearLayoutWithLine);paddlingLineLeft = (int) ta.getDimension(1, getPaddingLeft());paddlingLineTop = (int) ta.getDimension(2, getPaddingTop());paddlingLineRight = (int) ta.getDimension(3, getPaddingRight());paddlingLineBottom = (int) ta.getDimension(4, getPaddingBottom());ta.recycle();

转载地址:https://blog.csdn.net/id19870510/article/details/53009728 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:当innerHTML遇上document.getElementById
下一篇:JS 表单submit() 提交无效的问题

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月17日 18时38分47秒