2010-03-17 5 views
4

Я создал элемент управления со списком с помощью edittext и spinner. Я пытаюсь передать атрибут android: prompt на обтекатель , что означает, что мне нужно поймать его в конструкторе, который передает мой атрибут и устанавливает его на счетчике. Я не могу понять, как получить значение подсказки. Пытаюсь,Как получить атрибут XML для настраиваемого элемента управления

int[] ra = { android.R.attr.prompt }; 
TypedArray ta = context.getTheme().obtainStyledAttributes(ra); 
int id = ta.getResourceId(0, 0); 

я вернусь 0, что означает, что он не нашел атрибут. Я также сделал ta.count(), который вернул 0. Так что я ничего не получаю.

Мой XML просто определяет значение android: prompt.

Благодаря

ответ

6

Я только что написал ответ, объясняющий весь процесс для using XML with custom UI elements. В вашем случае нет необходимости объявлять стиль, поскольку вам не нужны специальные атрибуты. Используя android.R.attr.prompt, поскольку int id будет работать нормально. R.styleable.className_attributeName будет работать только в том случае, если вы определили свои атрибуты в стиле, и вы их получили, передав R.styleable.className в obtainStyledAttributes.

0
  1. Определить стиль в XML. Для экс: <declare-styleable name="ComboBox"> <attr name="prompt" format="reference"/> </declare-styleable>

  2. Чтобы получить значение в использовании конструктора: TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ComboBox);

Используйте TypedArray получить методы, чтобы получить конкретный атрибут.

+0

Это, но вы не должны забывать определять новое пространство имен xml для своих пользовательских настроек в макете xml: xmlns: app = "http://schemas.android.com/apk/res/package.name". И используйте a.getString (R.stylable.option_name), чтобы получить эту опцию. – MrSnowflake

+1

Большое спасибо! a.getString (R.styleable.option_name) не работает. Я получаю исключение индекса за пределами. Предполагаю, что индекс должен быть индексом внутри массива, а не идентификатором ресурса. Использование android: prompt также работает, android.R.attr.prompt. Моя проблема заключалась в неправильной сигнатуре метода getStyleAttributes. Я думал, что должен использовать тему. Эти сигнатуры работают: TypedArray a = context.obtainStyledAttributes (attrs, new int [] {android.R.attr.prompt}); или context.obtainStyledAttributes (attrs, new int [] {android.R.attr.prompt}, 0, 0); Затем a.getResourceId (0, 0); – David