Я пытаюсь создать элемент управления (панель, которая расширяется и сжимается при щелчке по заголовку), и я нашел некоторый код в сети.В конструкторе у меня есть
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyControl);
...
int headerId = array.getResourceId(R.styleable.MyControl_header, -1);
Элемент управления создается в файле макета со следующим XML:
<MyControl
android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/drawer"
header="@+id/header" content="@+id/drawerContent"
android:layout_below="@id/contentContainer" android:background="#00FF00">
<TextView android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@id/header"
android:text="This is a header"/>
<TextView android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@id/drawerContent"
android:text="@string/sample_text" />
</MyControl>
Проблема в том, что getResourceId()
возвращается с -1(то есть он не может найти ресурс, установленный для атрибута).
Есть идеи почему?
РЕДАКТИРОВАТЬ: Забыли включить мой файл attrs.xml:
<resources>
<declare-styleable name="MyControl">
<attr name="collapsedHeight" format="dimension" />
<attr name="header" format="reference" />
<attr name="content" format="reference" />
<attr name="animationDuration" format="integer" />
</declare-styleable>
РЕДАКТИРОВАТЬ 2: Почему-то я не думал проверять другие атрибуты - я добавил пару других атрибутов.Я также проверил их значения в отладчике, и, похоже, они тоже по умолчанию.Так что это не проблема с getResourceId
, это связано с тем, как я получаю атрибуты в целом.Я новичок в Android, так что кто-нибудь может увидеть что-нибудь в моем коде обработки атрибутов?