Кнопка Android изменить программно? - PullRequest
3 голосов
/ 19 июля 2011

Здравствуйте, у меня есть кнопка изображения linearButton, для которой задан фон для рисования в XML. Я хочу условно заменить фон внутри кода, но этого никогда не происходит!

Drawable replacer = getResources().getDrawable(R.drawable.replacementGraphic);
linearButton.setBackgroundDrawable(replacer);

Это кажется неэффективным, есть ли функция перезагрузки для кнопок изображения, которые мне нужно вызвать, прежде чем они изменятся визуально?

Ответы [ 3 ]

7 голосов
/ 19 июля 2011

Метод invalidate() заставит перерисовать любое представление:

Drawable replacer = getResources().getDrawable(R.drawable.replacementGraphic);
linearButton.setBackgroundDrawable(replacer);
linearButton.invalidate();

См. здесь для справки.

4 голосов
/ 03 августа 2013

«Правильный» ответ должен быть обновлен.

setBackgroundDrawable() устарело в API 16

setBackground() добавлено в API 16

Лучшим ответом может быть:

int replace = R.drawable.my_image;
myButton.setBackgroundResource(replace);
myButton.invalidate();

или просто:

myButton.setBackgroundResource(R.drawable.my_image);
myButton.invalidate();

Будет работать с уровня API 1-18

0 голосов
/ 18 октября 2013

Попробуйте это

linearButton.setImageResource(R.drawable.replacementGraphic);

Я надеюсь, что это должно работать

...