自定义view 读取 属性No resource identifier found for attribute

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

这个错误主要原因是

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


其中xmlns必须写, 

  <com.package.name.view.LinearLayoutWithLine        xmlns:app="http://schemas.android.com/apk/res-auto"      ......        app:paddingLineLeft="1dip"

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

<com.package.name.view.LinearLayoutWithLine      ......        paddingLineLeft="1dip"

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

 <com.package.name.view.LinearLayoutWithLine        xmlns:app="http://schemas.android.com/apk/res/com.package.name"      ......        app:paddingLineLeft="1dip"
xmlns最后面是res/app的包名. 而不是v自定义的iew所在的package的路径

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

。。。。。

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

<declare-styleable name="LinearLayoutWithLine">        <!-- 线的颜色 -->        <attr name="lineColor" format="color"/>        <attr name="paddingLineLeft" format="dimension"/>        <attr name="paddingLineTop" format="dimension"/>        <attr name="paddingLineRight" format="dimension"/>        <attr name="paddingLineBottom" format="dimension"/>    </declare-styleable>

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 = 0public static final int LinearLayoutWithLine_paddingLineLeft = 1public 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/jiangjunshow

猜你喜欢

转载自blog.csdn.net/gruhgd/article/details/87440008