studio setonclicklistener programming icon example android android-button clickable

android - setonclicklistener - setEnabled() vs setClickable(), ¿cuál es la diferencia?



set on click listener (6)

¿Qué diablos significa eso?

Citando la página de Wikipedia para "widget GUI" :

En el contexto de una aplicación, un widget puede habilitarse o deshabilitarse en un momento determinado. Un widget habilitado tiene la capacidad de responder a eventos, como pulsaciones de teclas o acciones del mouse. Un widget que no puede responder a tales eventos se considera deshabilitado. La apariencia del widget desactivado es típicamente diferente de un widget habilitado; el widget desactivado puede dibujarse en un color más claro, o puede oscurecerse visualmente de alguna manera. Ver la imagen a la derecha para un ejemplo.

Este concepto ha existido por un par de décadas y se puede encontrar en la mayoría de los marcos de GUI.

¿Cuál es la diferencia entre el estado habilitado / estado seleccionable y el estado deshabilitado / estado no seleccionable?

En Android, un widget en el que no se puede hacer clic no responderá a los eventos de clic. Un widget desactivado no solo no se puede hacer clic, sino que también indica visualmente que está desactivado.

¿A qué te refieres con: "... ya que hace que el Botón se" deshabilite "visualmente? ¿Cómo lo cambia visualmente?

Lo que hace que un Button vea y responda como un Button es su fondo, que es un StateListDrawable . Hay una imagen específica utilizada para el estado desactivado.

Hasta ahora, cuando quería evitar que el usuario presionara el botón, establecía el button.setClickable(false); y generalmente cambian el texto a algún tipo de color gris (para que el usuario sepa que el botón está desactivado). Hoy me encontré con la propiedad setEnabled() .

Así que fui a la documentación para ver la explicación del método a continuación:

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

¿Qué significa esto? ¿Cuál es la diferencia entre habilitar estado / estado seleccionable y estado desactivado / estado no hacer clic? ¿Podría alguien explicar por favor cuál es la diferencia entre hacer lo que estaba haciendo previamente, usar la propiedad setEnabled() y usar la propiedad setEnabled() ? ¿Qué se debe usar cuando? Busqué StackOverflow pero no pude encontrar nada relacionado. Gracias por adelantado.


Así que, básicamente, un falso habilitado no responde a ninguna respuesta y una respuesta de falso sonido que se puede hacer clic cuando se establece en tiempo de ejecución y créanme que acabo de probarlo.


Como dijo Dilip, setClickable no funciona si se establece en tiempo de ejecución. Aquí hay un truco para hacerlo funcionar:

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


Las diferencias se enumeran arriba, pero hay un consejo. use setClickable () después de setOnClickListener (). Debido a esto:

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


Las vistas también pueden responder a teclados externos, almohadillas direccionales (controladores remotos / de juegos) y dispositivos de asistencia ( switch , lectores de pantalla ).


setClickable public void setClickable (booleano clicable)

Activa o desactiva los eventos de clic para la vista particular. Cuando se puede hacer clic en una vista, cambiará su estado a "presionar" en cada clic. si esta propiedad de vista está deshabilitada, no cambiará su estado.

setEnabled public void setEnabled (Boolean habilitado)

Establece el estado habilitado de esta vista. Si la vista particular está configurada para habilitarse, pase el valor verdadero en el parámetro else pase falso