2012-03-25 3 views
1

Ich entwickle eine Assistenten-Benutzeroberfläche, in der der Benutzer nur dann weitermachen kann, wenn das Formular einigen Kriterien entspricht.Das Aussehen einer Schaltfläche ändern, je nachdem, ob sie aktiviert ist oder nicht

Bisher habe ich erfolgreich alle Logik hinter den Tasten und das Layout der Tasten selbst entwickelt, so dass ich die Vorwärts-Taste nur aktivieren kann, wenn der Benutzer einige Informationen eingefügt.

<Button 
    android:id="@+id/btnForward" 
    style="@style/buttonForward_disabled" 
    android:enabled="false" /> 

Wie Sie sehen können habe ich Stil zu beschreiben Attribute, wenn eine Taste (die mit Hintergrund ziehbar und Text technisch eine Schaltfläche)

Meine styles.xml-Datei enthält die folgenden

<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> 

und Schaltflächen werden korrekt angezeigt, wenn sie in das Layout instanziiert werden. Das offensichtliche Problem ist, dass Button.setEnabled(true) nur die Schaltfläche anklickbar macht, aber das Layout überhaupt nicht ändert. Im obigen Beispiel sehen Sie, dass der Text in beiden Fällen weiß ist: Es wird erwartet, dass er sich in der unmittelbaren Zukunft ändert, sobald ich alle Grafiken überprüft habe.

Ich habe gelesen, dass ich den Stil der Schaltflächen zur Laufzeit nicht programmgesteuert ändern kann. Was kann ich tun, damit die Schaltflächen je nach aktiviertem Status unterschiedlich aussehen?

Antwort

2

Verwenden Sie selectors. Sie sollen genau das tun, was Sie wollen. Im Grunde definieren sie verschiedene Stile, die auf Ihren Knopf entsprechend dem ausgewählten, fokussierten und aktivierten Zustand angewendet werden.

+0

In dem Beispiel, das Sie verbunden haben, sehe ich, dass es auch eine Auswahl für Farben gibt. Mein Eclipse zeigt mir nicht das Attribut android: color an: Bezieht es sich darauf, dass das SDK mindestens 7 in meinem Projekt ist? –

+0

Tut mir leid, ich kenne die Antwort nicht aus dem Kopf. Ich habe immer API-Level> = 8 verwendet. –

+0

Mach dir keine Sorgen, ich werde in das graben –