2014-05-09 3 views
5

Ich versuche, einen Android-Code zu schreiben, um drei Zustände für einen Android Switch zu erstellen. Drei Zustände bedeutet ON - Default - OFF.Wie kann ich den dritten Status in Android Switch hinzufügen?

Wenn ich meine App öffne, ist der Switch im Standardmodus und die Taste wird in der Mitte sein. Wenn ich den Schalter auf die linke Seite ziehe, ändert sich der Zustand auf EIN und wenn ich nach rechts ziehe, wird der Zustand auf AUS geändert.

In Android Switch haben wir zwei Status ON/OFF. Ich bin nicht in der Lage, irgendeine Technik zu finden, um einen dritten Zustand in den Schalter hinzuzufügen.

Wie kann ich den dritten Status in Android Switch hinzufügen?

+2

Machen Sie Ihre eigene Switch-Klasse als benutzerdefinierte Ansicht. Android ist einfach nicht als Tristate gemacht. Wirklich, es kann insgesamt nicht mehr als eine Stunde dauern, du wirst länger warten als auf Antworten hoffen. –

+0

ja dafür müssen Sie mit Ihren benutzerdefinierten Widgets bekommen. – Mani

+0

Ja, dass ich weiß, deshalb habe ich meine Frage hier gepostet ... bitte schlagen Sie mir vor, wie kann ich das benutzerdefinierte Widget für Switch hinzufügen. – MyProg

Antwort

0

Sie können ein benutzerdefiniertes Steuerelement basierend auf dem Android Switch-Steuerelement erstellen, das über die drei gewünschten Status verfügt.

Sie können einige Informationen finden Sie hier:

http://developer.android.com/guide/topics/ui/custom-components.html

Tutorial:

http://www.tutorialspoint.com/android/android_custom_components.htm

ich persönlich den Ansatz im Tutorial verwendet nehmen würde. Erweitern Sie einfach die Switch-Klasse in Ihrem 3-State-Switch und versuchen Sie, die Zustände zu überschreiben, um einen dritten hinzuzufügen.

+0

Vielen Dank für das Tutorial, aber ich bekomme nicht, wie für den Schalter zu programmieren? – MyProg

+0

Sie erstellen eine Klasse ThreeStateSwitch und Sie erweitern den Android-Switch. Sehen Sie nach, welche Methode in Android verwendet wird, um die Zustände zu deklarieren und überschreiben Sie einfach diese Methode, um sie in Ihren dritten Status einzufügen. Hier ist die Dokumentation auf der Android-Switch-Steuerung: http://developer.android.com/reference/android/widget/Switch.html Sie können die meisten davon finden, indem Sie einfach in Google BTW nachschlagen. –

+1

Ziemlich hilflose Antwort, es gibt keine Möglichkeit, einem Schalter einen dritten Zustand hinzuzufügen, wenn Sie einen finden, bitte erleuchten Sie mich. – 3c71

1

Sie können ein benutzerdefiniertes ImageButton erstellen, um dies zu erreichen, benötigen Sie 3 verschiedene Bilder in diesem Fall. Sie können auch weitere Status hinzufügen, wenn Sie möchten.

public class FlashButton extends ImageButton{ 

    public enum FlashEnum { 
     AUTOMATIC, ON, OFF 
    } 

    public interface FlashListener { 
     void onAutomatic(); 
     void onOn(); 
     void onOff(); 
    } 

    private FlashEnum mState; 
    private FlashListener mFlashListener; 

    public FlashButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     this.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       int next = ((mState.ordinal() + 1) % FlashEnum.values().length); 
       setState(FlashEnum.values()[next]); 
       performFlashClick(); 
      } 
     }); 
     //Sets initial state 
     setState(FlashEnum.AUTOMATIC); 
    } 

    private void performFlashClick() { 
     if(mFlashListener == null)return; 
     switch (mState) { 
      case AUTOMATIC: 
       mFlashListener.onAutomatic(); 
       break; 
      case ON: 
       mFlashListener.onOn(); 
       break; 
      case OFF: 
       mFlashListener.onOff(); 
       break; 
     } 
    } 

    private void createDrawableState() { 
     switch (mState) { 
      case AUTOMATIC: 
       setImageResource(R.drawable.ic_flash_auto); 
       break; 
      case ON: 
       setImageResource(R.drawable.ic_flash_on); 
       break; 
      case OFF: 
       setImageResource(R.drawable.ic_flash_off); 
       break; 
     } 
    } 


    public FlashEnum getState() { 
     return mState; 
    } 

    public void setState(FlashEnum state) { 
     if(state == null)return; 
     this.mState = state; 
     createDrawableState(); 

    } 

    public FlashListener getFlashListener() { 
     return mFlashListener; 
    } 

    public void setFlashListener(FlashListener flashListener) { 
     this.mFlashListener = flashListener; 
    } 

} 
+0

Ist nicht so schön wie die Klasse Switch und die Verwendung von Zeichen für alle Zustände ist nicht unbedingt erwünscht, wenn die 3 (oder n) Zustände anpassbar sein müssen, etwa mit setStatesText (new String [] {text1, text2, ...}); – 3c71