Я разрабатываю интерфейс мастера, в котором пользователь может продолжать работу, только если форма соответствует некоторым критериям.
До сих пор я успешно разработал всю логику кнопок и компоновку самих кнопок, поэтому я могу включить кнопку "вперед" только тогда, когда пользователь вставил какую-то информацию.
<Button
android:id="@+id/btnForward"
style="@style/buttonForward_disabled"
android:enabled="false" />
Как вы можете видеть, я использовал атрибуты стиля для описания, когда кнопка (которая технически является кнопкой с возможностью рисования фона и текста)
Мой файл styles.xml
содержит следующее
<style name="buttonFB">
<item name="android:textAppearance">?android:attr/textAppearanceLarge</item>
<item name="android:textColor">#ffffff</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_weight">0.4</item>
<item name="android:layout_marginBottom">25dp</item>
<item name="android:layout_alignParentBottom">true</item>
<item name="android:enabled">true</item>
</style>
<style name="buttonFB_disabled" parent="buttonFB">
<item name="android:textColor">#ffffff</item>
<item name="android:enabled">false</item>
</style>
<style name="buttonForward_disabled" parent="buttonFB_disabled">
<item name="android:background">@drawable/btnfw_disabled</item>
<item name="android:layout_alignParentRight">true</item>
<item name="android:layout_marginRight">14dp</item>
<item name="android:text">@string/Forward</item>
</style>
<style name="buttonBackward_disabled" parent="buttonFB_disabled">
<item name="android:background">@drawable/btnfw_disabled</item>
<item name="android:layout_alignParentLeft">true</item>
<item name="android:layout_marginLeft">14dp</item>
<item name="android:text">@string/Backward</item>
</style>
и кнопки отображаются правильно, когда они создаются в макет. Очевидная проблема заключается в том, что Button.setEnabled(true)
только делает кнопку clickable, но не меняет макет вообще. В приведенном выше примере вы видите, что в обоих случаях текст белый: ожидается, что он изменится в ближайшем будущем, как только я просмотрю все графики.
Я прочитал, что я не могу программным образом изменить стиль кнопок во время выполнения. Что я могу сделать, чтобы кнопки выглядели по-разному в соответствии с их включенным состоянием?
Используйте селекторы. Они предназначены для того, чтобы делать именно то, что вы хотите. В основном они определяют разные стили, которые будут применяться к вашей кнопке в соответствии с выбранным, сфокусированным и включенным состоянием.