Переключение внешнего вида кнопки в зависимости от того, включена она или нет - PullRequest
1 голос
/ 26 марта 2012

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

До сих пор я успешно разработал всю логику за кнопками и расположение самих кнопок, поэтому я могу включить кнопку «вперед» только тогда, когда пользователь вставил некоторую информацию.

<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) только делает кнопку нажатой, но не меняет макет вообще. В приведенном выше примере вы видите, что в обоих случаях текст белый: ожидается, что он изменится в ближайшем будущем, как только я просмотрю всю графику.

Я прочитал, что не могу программно изменить стиль кнопок во время выполнения. Что можно сделать, чтобы кнопки выглядели по-разному в зависимости от их состояния?

1 Ответ

2 голосов
/ 26 марта 2012

Используйте селекторы . Они предназначены для того, чтобы делать именно то, что вы хотите. В основном они определяют различные стили, которые будут применены к вашей кнопке в соответствии с выбранным, сфокусированным и включенным состоянием.

...