自定义布局,在attrs.xml中丢失自定义属性

时间:2013-11-20 18:59:12

标签: android xml layout view merge

我在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循环。

知道为什么会这样吗?我以前习惯了很多布局,这是我第一次遇到问题。

2 个答案:

答案 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在我的声明中不知何故。

希望有一天能帮到某人。