2013-03-25 7 views
57

Bis jetzt, als ich den Benutzer davon abhalten wollte, die Taste zu drücken, würde ich button.setClickable(false); setzen und den Text normalerweise in eine Art von grauer Farbe ändern (um den Benutzer wissen zu lassen, dass die Schaltfläche deaktiviert ist). Heute bin ich auf die setEnabled() Eigenschaft gestoßen.setEnabled() vs setClickable(), was ist der Unterschied?

Also ging ich auf die Dokumentation der Methode der Erklärung weiter unten zu sehen:

setEnabled(boolean enabled) 
    Set the enabled state of this view. 

Was bedeutet das auch? Was ist der Unterschied zwischen aktiviertem Status/klickbarem Status und deaktiviertem Status/nicht klickbarem Status? Könnte jemand bitte erklären, was der Unterschied zwischen dem ist, was ich vorher gemacht habe, der klickbaren Eigenschaft und der setEnabled() Eigenschaft? Was sollte wann verwendet werden? Ich habe StackOverflow durchsucht, konnte aber nichts Ähnliches finden. Danke im Voraus.

+5

Ich würde vermuten, dass setEnabled (false) eine Ansicht nicht anklickbar und nicht fokussierbar macht, was bedeutet, dass es vollständig gesperrt wird. Außerdem ist setEnabled (false) eine bevorzugte Methode im Falle eines Buttons, da es den Button optisch "deaktiviert" macht. – Droidman

+0

was meinst du mit: "..wenn es den Button optisch" deaktiviert "macht? Wie ändert er es visuell? ? und was passiert, wenn ich einen benutzerdefinierten Selektor verwende? –

+0

nicht sicher über einen benutzerdefinierten Selektor, habe es nicht getestet. Aber im Falle eines Standard-Button, wird es halbtransparent, so dass Sie es nicht von Hand machen müssen – Droidman

Antwort

68

Was zum Teufel ist das gemein?

Zitiert the Wikipedia page for "GUI widget":

Im Zusammenhang mit einer Anwendung, ein Widget, kann zu einem gegebenen 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, wird als deaktiviert betrachtet. Das Erscheinungsbild des 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 ein paar Jahrzehnten und kann in den meisten GUI-Frameworks gefunden werden.

Was ist der Unterschied zwischen aktiviertem Status/klickbarem Status und deaktiviertem Status/nicht klickbarem Status?

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

was meinst du mit:“..since es macht den Knopf optisch‚disabled‘wie funktioniert es ändert es visuell

Was ein Button Look macht und reagieren wie ein Button ist sein? Hintergrund, der ein StateListDrawable ist

+0

@ Maver1ck : Der 'Button'' StateListDrawable' hat definitiv einen deaktivierten Zustand: https://github.com/android/platform_frameworks_base/blob/master/core/res/res/drawable/btn_default.xml Es ist möglich, dass noch andere Effekte angewendet werden die Klasse "Button", obwohl mir keine bekannt ist. – CommonsWare

+0

Ich habe gerade einen kleinen Test gemacht und es scheint, als ob für Buttons die Textfarbe ebenfalls geändert wird. Sie wird grau, wenn ich die Schaltfläche auf false gesetzt habe. –

+0

so grundsätzlich wenn ich ac benutze Wahlschalter? Ich sollte einen bestimmten Zeichensatz angeben, wenn ich die Methode setEnable() für diese spezielle Schaltfläche verwenden möchte (und eine Rückmeldung zu dieser Änderung erhalten)? –

2

Also grundsätzlich aktiviert ein false reagiert nicht auf eine Antwort und eine klickbare falsche noch Antwort, wenn zur Laufzeit gesetzt und mir vertrauen, dass ich gerade versucht habe es.

1

Wie Dilip sagte, setKlickable funktioniert nicht, wenn zur Laufzeit gesetzt. Hier ist ein Trick, um es zu machen arbeiten:

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(); 
    } 
}); 
1

Ansichten kann auch auf einer externen Tastatur Richtungs Pads (remote/Gaming-Controller) und Hilfsmittel reagieren (switch, screen readers).

Verwandte Themen