2013-03-25 19 views
57

Do tej pory, gdy chciałem zatrzymać użytkownika od naciśnięcia przycisku, ustawiłem button.setClickable(false); i zazwyczaj zmieniłem tekst na szary kolor (aby użytkownik wiedział, że przycisk jest wyłączony). Dzisiaj natknąłem się na właściwość setEnabled().setEnabled() vs setClickable(), jaka jest różnica?

Poszedłem więc do dokumentacji patrz metoda jest wyjaśnienie poniżej:

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

Co to w ogóle znaczy? Jaka jest różnica między stanem aktywacji/stanem klikalnym a stanem nieaktywnym/stanem nieklatkowym? Czy ktoś mógłby wyjaśnić, jaka jest różnica pomiędzy robieniem tego, co robiłem wcześniej, używanie klikalnej właściwości i używanie właściwości setEnabled()? Czego należy użyć, kiedy? Przeszukałem StackOverflow, ale nie mogłem znaleźć niczego powiązanego. Z góry dziękuję.

+5

Domyślam się, że setEnabled (false) sprawia, że ​​widok jest nieklikalny i nie można go ustawić, co oznacza, że ​​jest całkowicie zablokowany. Ponadto, setEnabled (false) jest preferowanym sposobem w przypadku przycisku, ponieważ sprawia, że ​​przycisk jest wizualnie "wyłączony" – Droidman

+0

, co masz na myśli przez: ".. ponieważ sprawia, że ​​przycisk jest wizualnie" wyłączony "? W jaki sposób zmienia go wizualnie ? a co jeśli używam niestandardowego selektora? –

+0

nie jestem pewien co do niestandardowego selektora, nie przetestowałem go, ale w przypadku standardowego przycisku robi się półprzezroczysty, więc nie musisz tego robić ręcznie – Droidman

Odpowiedz

68

Co to do cholery znaczy?

Cytowanie the Wikipedia page for "GUI widget":

W kontekście aplikacji, widget mogą być włączone lub wyłączone w danym momencie. Włączony widget może reagować na zdarzenia, takie jak naciśnięcia klawiszy lub działania myszy. Widżet, który nie odpowiada na takie zdarzenia, jest uznawany za wyłączony. Wygląd wyłączonego widżetu zazwyczaj różni się od włączonego widżetu; wyłączony widżet może być narysowany jaśniej lub może być w pewien sposób zasłonięty wizualnie. Zobacz obraz po prawej stronie dla przykładu.

Ta koncepcja istnieje już od kilku dekad i można ją znaleźć w większości frameworków GUI.

jaka jest różnica między umożliwić stan/stan klikalne i niepełnosprawnych państwowy/nie jest klikalny stan?

W systemie Android widget, który nie jest klikalny, nie będzie reagować na zdarzenia kliknięcia. Wyłączony widżet nie tylko nie jest klikalny, ale również wizualnie wskazuje, że jest wyłączony.

co masz na myśli mówiąc:”..since to sprawia, że ​​wizualnie Przycisk«wyłączony»w jaki sposób zmienia się wizualnie

Co sprawia, że ​​Button wygląd i reagować jak Button jest jego? tło, które jest StateListDrawable. Istnieje określony obraz używany dla stanu wyłączonego

+0

@ Maver1ck : 'Button'' StateListDrawable' zdecydowanie ma wyłączony stan: https://github.com/android/platform_frameworks_base/blob/master/core/res/res/drawable/btn_default.xml Możliwe, że są inne efekty zastosowane przez Klasy 'Button', choć nie jestem tego świadomy – CommonsWare

+0

Właśnie wykonałem mały test i wygląda na to, że w przypadku Przycisków zmieni się również kolor tekstu, który staje się szary, gdy ustawiam opcję włączania przycisku na wartość fałsz –

+0

, więc w zasadzie jeśli używam ac seom selektor? Powinienem określić konkretny drawable, jeśli chciałbym użyć metody setEnable() na tym konkretnym przycisku (i uzyskać informację zwrotną na temat tej zmiany)? –

2

Zasadniczo włączone false nie reaguje na żadną odpowiedź i klikalne false nadal odpowiedzi, gdy ustawiony w czasie wykonywania i zaufaj mi, że po prostu próbował to

1

Jak powiedział Dilip, setClickable nie działa, jeśli ustawione w czasie wykonywania. Oto sztuczka, aby to działa:

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

Widoki mogą także reagować na klawiatur zewnętrznych, kierunkowe klocki (piloty/gier) oraz urządzeń pomocniczych (switch, screen readers).

Powiązane problemy