Стиль кнопок Android программно
Как программно добавить / удалить стиль для кнопки Android? Можно ли применить стиль во время выполнения?
У меня есть две кнопки, которые выглядят так
---------- ---------- | Кнопка A | | Кнопка B | ---------- ----------
то, что я хотел сделать, это когда кнопка нажата (скажем, кнопка B), она запускает некоторый код, затем меняет стиль кнопки B на что-то другое (например, выделенные границы) и будет выглядеть примерно так:
---------- ========== | Кнопка A | || Кнопка B || ---------- ==========
Я знаю, как делать стили (т.е. создавать стили) в XML, все, что я хочу знать, это как применять стили во время выполнения / с использованием кода Java.
3 ответа
Давайте сделаем некоторый код для вашего случая...:) Для применения стиля к вашему представлению (кнопка в данном случае) динамически, вы должны сделать следующее в папке макета (res/layout).
Я назвал это,buttonstyle.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<solid android:color="#449def"/>
<stroke android:width="1dp" android:color="#2f6699"/>
<corners android:radius="3dp"/>
<padding android:left="10dp" android:top="10dp" android:right="10dp"
android:bottom="10dp"/>
</shape>
</item>
<item>
<shape>
<gradient android:startColor="#449def" android:endColor="#2f6699" android:angle="270"/>
<stroke android:width="1dp" android:color="#2f6699"/>
<corners android:radius="4dp"/>
<padding android:left="10dp" android:top="10dp" android:right="10dp"
android:bottom="10dp"/>
</shape>
</item>
</selector>
Теперь примените стиль к своей кнопке, добавьте следующий код в метод onCreate() вашей активности.
Button transferBtn = new Button(this);
transferBtn.setText("Test Example");
transferBtn.setId(R.string.transferBtn);
transferBtn.setBackgroundResource(R.layout.buttonstyle);
Вы не можете применять определенные XML-стили во время выполнения (из кода). Если вы хотите изменить фон и стиль шрифта, когда кнопка нажата (нажата), вы должны создать селектор, который определяет, какой фон использовать для обычной кнопки или для состояния щелчка.
Если селектор не тот, который вам нужен, вы должны вручную установить для каждого свойства кнопки желаемое значение с помощью метода setXXX кнопки класса Button.
PS Вы можете поменять старую кнопку на новую, накачанную из xml другим стилем. Но это не очень хороший способ, я полагаю...
Как я ответил в этой другой теме, вы можете либо установить фон программы программно, как предлагают некоторые люди, либо вы можете установить стиль программно (как я предлагаю здесь), если вы используете библиотеку поддержки.