我为某些自定义视图定义了一个父styleable
,如下所示
<declare-styleable name="ParentView">
<attr name="color" format="color" />
<attr name="rotate" format="float" />
</declare-styleable>
然后我定义了一个子styleable
,它继承了父样式的属性,即
<declare-styleable name="ParentView.ChildView">
<attr name="state">
<enum name="state0" value="0"/>
<enum name="state1" value="1"/>
</attr>
</declare-styleable>
现在,我可以在自定义视图中从子样式中检索属性值,但不能从其父样式中检索任何属性,即在xml中将我的自定义视图设置为
<com.example.android.MyCustomView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
custom:color="@color/orange"
custom:state="state1" />
并在我的自定义视图的构造函数
中使用以下代码TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.ParentView_ChildView, 0, 0);
try {
state = array.getInt(R.styleable.ParentView_ChildView_state, state);
color = array.getInt(R.styleable.ParentView_color, Color.WHITE);
}
finally {
array.recycle();
}
我正确检索state
属性,但color
属性始终只提供其默认值,即白色。我在这里错过了什么吗?
答案 0 :(得分:0)
您已将颜色定义为attr文件中的颜色格式,但您在代码中执行了getInt。
尝试更改此行
color = array.getInt(R.styleable.ParentView_color, Color.WHITE);
到
color = array.getColor(R.styleable.ParentView_color, Color.WHITE);