2011-04-29 4 views
4

J'ai un ToggleButton, lorsque vous cliquez dessus, je ne veux pas que l'état change. Je vais gérer les changements d'état moi-même quand après avoir reçu des commentaires de tout ce que le bouton a basculé. Comment puis-je empêcher le changement d'état sur le clic?Empêcher ToggleButton de l'état de commutation

+0

J'ai utilisé tgl.setChecked (! Tgl.isChecked()); dans mon écouteur onClick. (tgl os la vue ToggleButton) –

Répondre

0

Bien que je pense que vous pouvez simplement le marquer comme désactivé, je ne pense pas que ce soit une bonne idée, car les utilisateurs sont habitués à une certaine sémantique d'un tel bouton.

Si vous voulez seulement montrer un état, pourquoi n'utilisez-vous pas un ImageView et montrez des images différentes selon l'état?

4

Vous pouvez implémenter votre propre ToggleButton avec la méthode surchargée toggle() avec corps vide.

1

Vous pouvez simplement utiliser CheckedTextView à la place.

Bien sûr, vous devez définir une image d'arrière-plan et un texte en fonction de l'état, mais à part celles (que vous avez peut-être déjà utilisées), c'est une bonne alternative.

est ici un exemple de code dans le cas où vous manquez les attributs texton et textOff:

CheckableTextView.java:

public class CheckableTextView extends CheckedTextView { 
    private CharSequence mTextOn, mTextOff; 

    public CheckableTextView (final Context context, final AttributeSet attrs, final int defStyle) { 
     super(context, attrs, defStyle); 
     final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CheckableTextView, defStyle, 0); 
     mTextOn = a.getString(R.styleable.CheckableTextView_textOn); 
     mTextOff = a.getString(R.styleable.CheckableTextView_textOff); 
     a.recycle(); 
    } 

    public CheckableTextView(final Context context, final AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public CheckableTextView(final Context context) { 
     this(context, null, 0); 
    } 

    @Override 
    public void setChecked(final boolean checked) { 
     super.setChecked(checked); 
     if (mTextOn == null && mTextOff == null) 
      return; 
     if (checked) 
      super.setText(mTextOn); 
     else 
      super.setText(mTextOff); 
    } 

    public void setTextOff(final CharSequence textOff) { 
     this.mTextOff = textOff; 
    } 

    public void setTextOn(final CharSequence textOn) { 
     this.mTextOn = textOn; 
    } 

    public CharSequence getTextOff() { 
     return this.mTextOff; 
    } 

    public CharSequence getTextOn() { 
     return this.mTextOn; 
    } 


} 

dans res/valeurs/attr.xml:

<declare-styleable name="SyncMeCheckableTextView"> 
    <attr name="textOn" format="reference|string" /> 
    <attr name="textOff" format="reference|string" /> 
</declare-styleable> 

autre La solution possible serait d'utiliser setClickable (false) sur ToggleButton et de gérer onTouchListener lorsque l'action de mouvement est ACTION_UP.