5 Stimmen

ToggleButton am Zustandswechsel hindern

Ich habe eine ToggleButton, wenn Sie darauf klicken, ich will nicht, dass der Zustand zu ändern. Ich werde Statusänderungen selbst behandeln, nachdem ich Feedback von was auch immer die Schaltfläche umgeschaltet erhalten. Wie könnte ich verhindern, dass der Zustand ändern auf Klick?

6voto

ernazm Punkte 9138

Sie können Ihr eigenes ToggleButton mit übergeordneter toggle() Methode mit leerem Körper.

2voto

android developer Punkte 111449

Sie könnten stattdessen einfach die CheckedTextView verwenden.

Natürlich müssen Sie ein Hintergrundbild und einen Text auf der Grundlage des Zustands festlegen, aber abgesehen davon (die Sie vielleicht schon verwendet haben), ist es eine schöne alternative Lösung.

Hier ist ein Beispielcode, falls Sie die Attribute textOn und textOff vermissen:

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

}

in res/values/attr.xml :

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

Eine andere mögliche Lösung wäre, setClickable(false) auf dem ToggleButton zu verwenden und onTouchListener zu behandeln, wenn die Bewegungsaktion ACTION_UP ist.

0voto

Heiko Rupp Punkte 29262

Ich glaube zwar, dass man sie einfach als deaktiviert markieren kann, aber ich halte das für keine gute Idee, da die Benutzer an eine bestimmte Semantik einer solchen Schaltfläche gewöhnt sind.

Wenn Sie nur einen bestimmten Zustand anzeigen möchten, warum verwenden Sie dann nicht eine ImageView und zeigen je nach Zustand unterschiedliche Bilder an?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X