我一直在使用一些自定義佈局組件的自定義屬性沒有問題。到目前爲止,我只使用簡單的屬性(string,int等)。這些都是像這樣定義的values/attrs.xml
:爲什麼在使用getAttributeResourceValue時需要指定XML名稱空間?
<declare-styleable name="StaticListView">
<attr name="border_size" format="dimension" />
</declare-styleable>
,並在我的佈局:
<de.example.androidapp.StaticListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
namespace:border_size="1px"
/>
,並使用像這樣:
int borderSize = (int) a.getDimension(R.styleable.StaticListView_border_size, 0);
現在,我想要指定佈局一個自定義屬性,不能使用上面使用的R.styleable
方法。
這裏是我如何定義屬性:
<declare-styleable name="StaticListView">
<attr name="emptyLayout" format="reference" />
</declare-styleable>
,並使用它:
<de.example.androidapp.StaticListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
namespace:emptyLayout="@layout/empty"
/>
這是我怎麼想使用它,但我總是得到默認值( -1
):
int emptyLayoutInt = attrs.getAttributeResourceValue(R.styleable.StaticListView_emptyLayout, -1);
然而,這作品:
int emptyLayoutInt = attrs.getAttributeResourceValue("http://schemas.android.com/apk/res/de.example.androidapp", "emptyLayout", -1);
我不喜歡硬編碼XML名稱空間。使用R.styleable
屬性可以很好地避免這種情況。
我做錯了什麼或者這是一個錯誤/預期的行爲?
感謝您的建議。它沒有解決我的問題,但它確實導致我再次查看我沒有正確使用的TypedArray實例。 – 2012-07-20 11:33:05
歡迎:)我忘了寫getResourceId。我正在對代碼進行最後的修改。 – 2012-07-20 11:47:45