Как получить ссылку на атрибут в коде? - PullRequest
45 голосов
/ 22 февраля 2012

Я хочу получить указательную ссылку из атрибута через код. В моих макетах XML я могу легко получить ссылочный объект для рисования следующим образом:

android:background="?attr/listItemBackground"

Ссылка на атрибут задается моей темой. Я смотрю, чтобы увидеть, возможно ли сделать эту ссылку доступной для рисования через код.

Я могу обойти это, создав стиль attr и прочитав значение внутри пользовательского представления, но в этом случае я хочу выяснить, возможно ли это, не делая всего этого. Я думаю, это было бы возможно, но я не нашел способов получить ссылку на этот атрибут.

Спасибо!

Ответы [ 2 ]

105 голосов
/ 23 февраля 2012

Вот как вы это делаете:

// Create an array of the attributes we want to resolve
// using values from a theme
int[] attrs = new int[] { R.attr.listItemBackground /* index 0 */};

// Obtain the styled attributes. 'themedContext' is a context with a
// theme, typically the current Activity (i.e. 'this')
TypedArray ta = themedContext.obtainStyledAttributes(attrs);

// To get the value of the 'listItemBackground' attribute that was
// set in the theme used in 'themedContext'. The parameter is the index
// of the attribute in the 'attrs' array. The returned Drawable
// is what you are after
Drawable drawableFromTheme = ta.getDrawable(0 /* index */);

// Finally, free the resources used by TypedArray
ta.recycle();
0 голосов
/ 22 февраля 2012

Разве вы не должны использовать:

android:background="@drawable/listItemBackground"

А потом:

myImageButton.getBackgroundDrawable()

Или, может быть, я не понял...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...