setEnabled() und setClickable(), was ist der Unterschied?

Lesezeit: 4 Minuten

Benutzer-Avatar
Emil Adz

Wenn ich den Benutzer bisher davon abhalten wollte, die Taste zu drücken, habe ich die eingestellt button.setClickable(false); und normalerweise den Text in eine Art graue Farbe ändern (um den Benutzer wissen zu lassen, dass die Schaltfläche deaktiviert ist). Heute bin ich über die gestolpert setEnabled() Eigentum.

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 aktiviertem Zustand/anklickbarem Zustand und deaktiviertem Zustand/nicht anklickbarem Zustand? Könnte jemand bitte erklären, was der Unterschied zwischen der Verwendung der anklickbaren Eigenschaft und der Verwendung von ist, was ich zuvor getan habe? setEnabled() Eigentum? Was sollte wann verwendet werden? Ich habe Stack Overflow durchsucht, konnte aber nichts Verwandtes finden.

  • Ich würde vermuten, dass setEnabled (false) eine Ansicht nicht anklickbar UND nicht fokussierbar macht, was bedeutet, dass sie vollständig gesperrt wird. Außerdem ist setEnabled(false) ein bevorzugter Weg im Falle eines Buttons, da es den Button visuell “deaktiviert” macht.

    – Droidenmann

    25. März 2013 um 13:24 Uhr


  • Was meinst du mit: “..da es den Button visuell “deaktiviert” macht? Wie ändert es ihn visuell? Und was ist, wenn ich einen benutzerdefinierten Selektor verwende?

    – Emil Adz

    25. März 2013 um 13:29 Uhr

  • Ich bin mir bei einem benutzerdefinierten Selektor nicht sicher, habe ihn nicht getestet. Aber im Falle eines Standard-Buttons wird es halbtransparent, sodass Sie es nicht von Hand machen müssen

    – Droidenmann

    25. März 2013 um 13:32 Uhr

Was zum Teufel soll das heißen?

Zitieren die Wikipedia-Seite für “GUI-Widget”:

Im Kontext einer Anwendung kann ein Widget zu einem bestimmten Zeitpunkt aktiviert oder deaktiviert werden. Ein aktiviertes Widget kann auf Ereignisse wie Tastenanschläge oder Mausaktionen reagieren. Ein Widget, das auf solche Ereignisse nicht reagieren kann, gilt als deaktiviert. Das Erscheinungsbild eines deaktivierten Widgets unterscheidet sich normalerweise von einem aktivierten Widget. Das deaktivierte Widget kann in einer helleren Farbe gezeichnet oder auf irgendeine Weise visuell verdeckt sein. Siehe das Bild rechts für ein Beispiel.

Dieses Konzept gibt es seit einigen Jahrzehnten und ist in den meisten GUI-Frameworks zu finden.

Was ist der Unterschied zwischen aktiviertem Zustand/anklickbarem Zustand und deaktiviertem Zustand/nicht anklickbarem Zustand?

In Android reagiert ein Widget, das nicht anklickbar ist, nicht auf Klickereignisse. Ein deaktiviertes Widget ist nicht nur nicht anklickbar, sondern zeigt auch visuell an, dass es deaktiviert ist.

Was meinst du mit: “… da es den Button visuell “deaktiviert” macht? Wie ändert es ihn visuell?

Was macht ein Button aussehen und reagieren wie a Button ist sein Hintergrund, der a ist StateListDrawable. Für den deaktivierten Zustand wird ein bestimmtes Bild verwendet.

  • @Maver1ck: Die Button StateListDrawable hat definitiv einen deaktivierten Zustand: github.com/android/platform_frameworks_base/blob/master/core/… Es ist möglich, dass andere Effekte von der angewendet werden Button Klasse, obwohl mir keine bekannt ist.

    – CommonsWare

    25. März 2013 um 13:53 Uhr

  • Ich habe gerade einen kleinen Test gemacht und es scheint, als würde sich bei Buttons auch die Textfarbe ändern. Es wird grau, wenn ich die aktivierte Schaltfläche auf “false” setze.

    – FD_

    25. März 2013 um 13:54 Uhr

  • Also im Grunde, wenn ich einen benutzerdefinierten Selektor verwende? Ich sollte ein bestimmtes Drawable angeben, wenn ich die Methode setEnable() für diese bestimmte Schaltfläche verwenden möchte (und um ein Feedback zu dieser Änderung zu erhalten)?

    – Emil Adz

    25. März 2013 um 13:54 Uhr

  • @FD_: Ah, ja, das ist TextView behindertes Verhalten, das Button erbt. Textfarben sind oft ColorStateList Objekte, die auch aktivierte vs. deaktivierte Zustände haben können. Entschuldigung, das habe ich vergessen.

    – CommonsWare

    25. März 2013 um 13:56 Uhr

  • @EmilAdz: Wenn Sie die Textfarbe ändern oder den Hintergrund der Schaltfläche ändern, möchten Sie einen entsprechenden Eintrag in der ColorStateList oder StateListDrawable für einen behinderten Zustand. Dieser Eintrag wird wann verwendet setEnabled(false) heißt, bzw android:enabled="false" wird in einem Layout verwendet.

    – CommonsWare

    25. März 2013 um 13:57 Uhr

Im Grunde genommen reagiert ein aktiviertes False auf keine Antwort und eine anklickbare False-Still-Antwort, wenn es zur Laufzeit festgelegt wird, und glauben Sie mir, ich habe es gerade ausprobiert.

Ein großer Unterschied, den ich an anderer Stelle nicht erwähnt sehe, sind überlappende Ansichten. Ein View mit clickable=true und enabled=false erlaubt es Ihnen nicht, einen View dahinter zu drücken. Aber ein View mit clickable=false ermöglicht es Ihnen, einen View dahinter zu drücken.

Wie Dilip sagte, funktioniert setClickable nicht, wenn es zur Laufzeit gesetzt 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();
  }
});

Views können auch auf externe Tastaturen, Steuerkreuze (Fernbedienung/Gaming-Controller) und Hilfsgeräte (Schalter, Screenreader).

Benutzer-Avatar
Aloys_寒风

Die Unterschiede sind oben aufgeführt, aber es gibt einen Tipp. Verwenden Sie setClickable() nach setOnClickListener(). Aus diesem Grund:

public void setOnClickListener(@Nullable OnClickListener l) {
    if (!isClickable()) {
        setClickable(true);
    }
    getListenerInfo().mOnClickListener = l;
}

Benutzer-Avatar
Mohammed Abdullah

setClickable public void setClickable (boolean anklickbar)

Es aktiviert oder deaktiviert Klickereignisse für die jeweilige Ansicht. Wenn eine Ansicht anklickbar ist, ändert sie ihren Zustand bei jedem Klick auf „gedrückt“. Wenn diese Ansichtseigenschaft deaktiviert ist, ändert sie ihren Status nicht.

setEnabled public void setEnabled (boolean aktiviert)

Es legt den aktivierten Status dieser Ansicht fest. Wenn die bestimmte Ansicht aktiviert ist, übergeben Sie den Parameter true, andernfalls übergeben Sie false

1295170cookie-checksetEnabled() und setClickable(), was ist der Unterschied?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy