Bis jetzt, als ich den Benutzer daran hindern wollte, die Taste zu drücken, stellte ich die ein button.setClickable(false);
und änderte normalerweise den Text in eine graue Farbe (um den Benutzer wissen zu lassen, dass die Taste deaktiviert ist). Heute bin ich auf das setEnabled()
Grundstück gestoßen .
Also ging ich zur Dokumentation, um die Erklärung der Methode unten zu sehen:
setEnabled(boolean enabled)
Set the enabled state of this view.
Was bedeutet das überhaupt? Was ist der Unterschied zwischen Aktivierungsstatus / anklickbarem Status und deaktiviertem Status / nicht anklickbarem Status? Könnte jemand bitte erklären, was der Unterschied zwischen dem, was ich zuvor getan habe, der Verwendung der anklickbaren Eigenschaft und der Verwendung der setEnabled()
Eigenschaft ist? Was soll wann verwendet werden? Ich habe nach Stapelüberlauf gesucht, konnte aber nichts Ähnliches finden.
quelle
Antworten:
Zitieren der Wikipedia-Seite für "GUI-Widget" :
Dieses Konzept gibt es seit einigen Jahrzehnten und ist in den meisten GUI-Frameworks zu finden.
In Android reagiert ein Widget, auf das nicht geklickt werden kann, nicht auf Klickereignisse. Ein deaktiviertes Widget kann nicht nur nicht angeklickt werden, sondern zeigt auch visuell an, dass es deaktiviert ist.
Was ein
Button
Aussehen und eine Antwort wie ein macht,Button
ist sein Hintergrund, der ein istStateListDrawable
. Für den deaktivierten Status wird ein bestimmtes Bild verwendet.quelle
Button
StateListDrawable
definitiv deaktiviert: github.com/android/platform_frameworks_base/blob/master/core/… Es ist möglich, dass dieButton
Klasse andere Effekte anwendet , obwohl mir keine bekannt sind.TextView
deaktiviertes Verhalten, dasButton
erbt. Textfarben sind häufigColorStateList
Objekte, die auch aktivierte oder deaktivierte Zustände haben können. Entschuldigung, das habe ich vergessen.ColorStateList
oderStateListDrawable
für einen deaktivierten Status haben. Dieser Eintrag wird verwendet, wenn ersetEnabled(false)
aufgerufen wird oderandroid:enabled="false"
in einem Layout verwendet wird.Grundsätzlich reagiert eine aktivierte falsche Antwort nicht auf eine Antwort und eine anklickbare falsche Antwort, wenn sie zur Laufzeit festgelegt ist, und vertraue mir, dass ich es gerade versucht habe.
quelle
Wie Dilip sagte, funktioniert setClickable nicht, wenn es zur Laufzeit festgelegt wird. Hier ist ein Trick, damit es funktioniert:
ToggleButton toggle = ... toggle.setOnTouchListener(new ToggleButton.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // If true is returned, the event is eated by the TouchListener return !v.isClickable(); } });
quelle
Ein großer Unterschied, den ich an keiner anderen Stelle sehe, besteht in überlappenden Ansichten. In einer Ansicht mit clickable = true und enabled = false können Sie keine Ansicht dahinter drücken. Mit einer Ansicht mit clickable = false können Sie jedoch eine Ansicht dahinter drücken.
quelle
Ansichten können auch auf externe Tastaturen, Steuerkreuze (Fernbedienungs- / Gaming-Controller) und Hilfsgeräte ( Schalter , Bildschirmleser ) reagieren .
quelle
Die Unterschiede sind oben aufgeführt, aber es gibt einen Tipp. Verwenden Sie setClickable () nach setOnClickListener (). Deswegen:
public void setOnClickListener(@Nullable OnClickListener l) { if (!isClickable()) { setClickable(true); } getListenerInfo().mOnClickListener = l; }
quelle
setClickable public void setClickable (boolescher Klick)
Es aktiviert oder deaktiviert Klickereignisse für die bestimmte Ansicht. Wenn eine Ansicht anklickbar ist, ändert sich ihr Status bei jedem Klick in "gedrückt". Wenn diese Eigenschaft der Ansicht deaktiviert ist, ändert sie ihren Status nicht.
setEnabled public void setEnabled (Boolescher Wert aktiviert)
Es setzt den Aktivierungsstatus dieser Ansicht. Wenn die bestimmte Ansicht aktiviert sein soll, übergeben Sie true im Parameter, andernfalls übergeben Sie false
quelle