Переключение внешнего вида кнопки в зависимости от того, включена она или нет

1

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

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

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

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

Теги:
android-layout
android-ui

1 ответ

2
Лучший ответ

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

  • 0
    В приведенном вами примере я вижу, что есть выбор и для цветов. Мой Eclipse не показывает мне атрибут android: color: связан ли он с минимальным SDK 7 в моем проекте?
  • 0
    Извините, я не знаю ответа из головы. Я всегда использовал уровень API> = 8.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню