Изменить ресурс изображения, используя атрибуты и темы - PullRequest
0 голосов
/ 11 июля 2011

Я не могу понять, как изменить ресурс изображения ImageButton в коде.Я определил следующую тему в themes.xml:

<resources>
   <style name="MMTheme.Blue">
        <item name="playButtonImg">@drawable/play_button</item>
        <item name="pauseButtonImg">@drawable/pause_button</item>
   </style>
</resources>

Атрибуты определены в attrs.xml:

<resources>
    <attr name="pauseButtonImg" format="integer"/>
    <attr name="playButtonImg" format="integer"/>
</resources>

Теперь я хочу изменить ресурс изображения ImageButton.Я могу изменить это следующим образом:

playButton.setImageResource(R.drawable.play_button);

Но я хочу использовать темы.Как изменить его с помощью атрибута playByttonImg, чтобы я мог использовать разные изображения для разных тем?

Ответы [ 2 ]

4 голосов
/ 12 октября 2012

Теперь у меня есть решение для исходного вопроса:

public static int getStyledDrawableId(Context context, int attribute)
{
    TypedArray a = context.getTheme().obtainStyledAttributes(new int[] { attribute });
    int id = a.getResourceId(0, -1);
    return id;
}

Когда я звоню, например, я получаю идентификатор для рисования: getStyledDrawableId(getContext(), R.attr.playButtonImg).Контекст ДОЛЖЕН иметь выбранную тему.

Атрибуты должны быть изменены на справочный формат:

<resources>
    <attr name="pauseButtonImg" format="reference"/>
    <attr name="playButtonImg" format="reference"/>
</resources>
0 голосов
/ 01 августа 2011

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

...