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?
Antworten
Zu viele Anzeigen?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.
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?