我在attrs.xml中有以下内容
<declare-styleable name="ToolsView">
<attr name="width_behaviour" format="reference" />
</declare-styleable>
我的布局文件中有以下代码:
<com.hidden.hidden2.view.ToolsView
xmlns:app="http://schemas.android.com/com.hidden.hidden2"
android:id="@+id/page_toolbar_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|center_horizontal"
android:background="@drawable/tools_background"
android:gravity="center_horizontal"
android:layerType="software"
android:visibility="visible"
app:width_behaviour="@integer/tools_view_width_behaviour" />
然而,当我尝试在我的类
的构造函数中读取app:width_behaviour时if (attributeSet != null) {
TypedArray a = getContext().obtainStyledAttributes(attributeSet, R.styleable.ToolsView, 0, 0);
final int N = a.getIndexCount();
for (int i = 0; i < N; i++) {
int attr = a.getIndex(i);
switch (attr) {
case R.styleable.ToolsView_width_behaviour:
widthBehaviour = a.getInteger(attr, -1);
break;
}
}
a.recycle();
属性集不为null,但N为0 - 未获取自定义属性!所以它永远不会进入for循环。
知道为什么会这样吗?我以前习惯了很多布局,这是我第一次遇到问题。
答案 0 :(得分:1)
将属性的格式更改为整数或维度(取决于你在width_behaviour下的含义),它应该有效。参考文献用于其他目的。
答案 1 :(得分:0)
哎哟。这是一个相当愚蠢的错误。
请参阅xmlns的定义:app - xmlns:app =“http://schemas.android.com/com.hidden.hidden2” 它应该是xmlns:app =“http://schemas.android.com/apk/res/com.hidden.hidden2”
/ apk / res / part在我的声明中不知何故。
希望有一天能帮到某人。