2012-02-22 3 views
39

Я ищу, чтобы получить ссылку ссылки из атрибута через код. В моих макетах XML можно легко получить ссылочный рисуем так:Как получить ссылку attr в коде?

android:background="?attr/listItemBackground" 

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

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

Спасибо!

ответ

99

Это как вы делаете его:

// 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(); 
+1

Спасибо за ваш ответ. Кажется, это единственный способ сделать это. – Jona

+0

Я пробовал, но он не будет работать с использованием индекса 0, а скорее 1 (это то, что возвращается 'getIndex (0)'. –

+0

Мне пришлось заменить R.attr.listItemBackground на R.attr.selectableItemBackground для этого, чтобы скомпилировать – dimsuz

0

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

android:background="@drawable/listItemBackground"

И потом:

myImageButton.getBackgroundDrawable()

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

+0

Ну, идея состоит в том, что я хочу получить доступ к ссылочному ресурсу из attr/listItemBackground, у которого есть правильный набор ссылок через theme.xml Получение уже установленного фона из представления не является проблемой :) – Jona

+0

Хорошо получилось! Я думаю, что это возможно, пытаясь получить непосредственно «? Attr/listItemBackground» из context.getResources(). Но я также думаю, что есть лучшие решения, чем ссылки на чертежи. Можем ли мы обсудить основную идею? (или нет, если вы считаете, что это решение является лучшим) –

+0

Ну, у меня есть сложные, но организованные темы для моего приложения. Но в этом случае я хотел посмотреть, возможно ли это и как можно будет использовать. Вы могли бы подумать, что res.getDrawable (R.attr.listItemBackground) будет делать это, поскольку ресурс уже настроен с текущей установленной темой и указывает на правильный ресурс. Но это немного сложнее, чем кажется ... – Jona

Смежные вопросы