自定义控件中的getResourceId在Eclipse编辑模式下返回默认值

时间:2012-04-01 18:12:19

标签: android android-custom-view

我正在尝试使用自定义属性的引用从自定义控件的构造函数中获取布局中另一个控件的资源ID。

控件在运行时运行得很漂亮,但是在编辑器中它会抛出下面显示的异常。

这段代码是从SlideDrawer Android源代码中无耻地撕掉的,所以我知道它必须有效,而且我做错了。

自定义控件的构造函数包含此...

mHandleId = a.getResourceId(R.styleable.Panel_handle, 0);
    if (mHandleId == 0) {
        e = new IllegalArgumentException(a.getPositionDescription() + 
                ": The handle attribute is required and must refer to a valid child.");
    }

布局如下所示

<com.xenosoft.hunted.widgets.Panel
    xmlns:app="http://schemas.android.com/apk/res/com.xenosoft.hunted"
    android:id="@+id/message_panel"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    app:handle="@+id/message_panel_handle"
    app:content="@+id/message_panel_content"
    app:position="left"
    >

    <ImageView
        android:id="@+id/message_panel_handle"
        android:layout_width="50dp"
        android:layout_height="fill_parent"
        android:background="#FF0000">

     </ImageView>

     <LinearLayout
        android:id="@+id/message_panel_content"
        android:layout_width="200px"
        android:layout_height="fill_parent"
        android:background="#000000">  
      </LinearLayout>

</com.xenosoft.hunted.widgets.Panel>

1 个答案:

答案 0 :(得分:0)

如果ID只能定义一次,则@+id/message_panel_handle@+id/message_panel_content定义两次。参考如何使用RelativeLayout定位视图。它应该是:

<com.xenosoft.hunted.widgets.Panel
    xmlns:app="http://schemas.android.com/apk/res/com.xenosoft.hunted"
    android:id="@+id/message_panel"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    app:handle="@+id/message_panel_handle"
    app:content="@+id/message_panel_content"
    app:position="left"
    >

    <ImageView
    android:id="@id/message_panel_handle"
    android:layout_width="50dp"
    android:layout_height="fill_parent"
    android:background="#FF0000">

     </ImageView>

     <LinearLayout
    android:id="@id/message_panel_content"
    android:layout_width="200px"
    android:layout_height="fill_parent"
    android:background="#000000">  
      </LinearLayout>

</com.xenosoft.hunted.widgets.Panel>