¿Cómo desactivar un botón de Android?

He creado un diseño que contiene dos botones, Siguiente y Anterior. Entre los botones estoy generando algunas vistas dinámicas. Así que cuando primero lanzo la aplicación quiero deshabilitar el botón "Anterior" ya que no habrá ninguna vista anterior. También quiero deshabilitar el botón "Siguiente" cuando no hay más vistas para mostrar. ¿Hay alguna manera de desactivar los botones?

Captura de pantalla del diseño de muestra

¿Lo intentaste?

myButton.setEnabled(false); 

Actualización: Gracias a Gwen. Casi se olvidó de que android:clickable se puede establecer en su diseño XML para determinar si un botón puede ser clicable o no.

No puedes habilitarlo o deshabilitarlo en tu XML (ya que tu diseño está configurado en tiempo de ejecución), pero puedes establecer si es clicable al iniciar la actividad con android:clickable .

Usted acaba de escribir una sola línea de código en su actividad

 Button btn = (Button) findViewById(R.id.button1); btn.setEnabled(false); 

Cuando quiera habilitar el mismo botón, simplemente escriba

 Button btn = (Button) findViewById(R.id.button1); btn.setEnabled(true); 

En Java, una vez que tenga la referencia del botón:

 Button button = (Button) findviewById(R.id.button); 

Para activar / desactivar el botón, puede utilizar:

 button.setEnabled(false); button.setEnabled(true); 

O:

 button.setClickable(false); button.setClickable(true); 

Puesto que desea desactivar el botón desde el principio, puede utilizar button.setEnabled (false); En el método onCreate. De lo contrario, desde XML, puede utilizar directamente:

 android:clickable = "false" 

Asi que:

 <Button android:id="@+id/button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button_text" android:clickable = "false" /> 

En mi caso,

 myButton.setEnabled(false); myButton.setEnabled(true); 

Está funcionando bien y está habilitando y deshabilitando el botón como debería. Pero una vez que el estado del botón se deshabilita, nunca vuelve al estado activado de nuevo, aunque es clicable. Traté de invalidar y refrescar el estado dibujable, pero no tuve suerte.

 myButton.invalidate(); myButton.refreshDrawableState(); 

Si usted o alguien que tenga un problema similar, lo que funciona para mí es establecer el fondo dibujable de nuevo. Funciona en cualquier nivel de API.

 myButton.setEnabled(true); myButton.setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.myButtonDrawable)); 

Sí se puede deshabilitar en xml sólo use <Button android:enabled="false"/>

Primero en xml haga el botón como android:clickable="false"

 <Button android:id="@+id/btn_send" android:clickable="false"/> 

Entonces en su código, dentro del método oncreate() , establezca la propiedad del botón como

 btn.setClickable(true); 

Entonces dentro del botón haga clic en cambiar el código en

 btn.setClickable(false); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); btnSend = (Button) findViewById(R.id.btn_send); btnSend.setClickable(true); btnSend.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { btnSend.setClickable(false); } }); } 

MANERA ERRADA EN EL ESCUCHADOR PARA USAR VARIABLE EN VEZ DE PARÁMETRO!

 btnSend.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { btnSend.setClickable(false); } }); 

MANERA CORRECTA:

 btnSend.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { /** check given view by assertion or cast as u wish */ if(v instance of Button) { /** cast */ Button button = (Button) v; /** we can perform some check up */ if(button.getId() == EXPECTED_ID) { /** disable view */ button.setEnabled(false) button.setClickable(false); } } else { /** you can for example find desired view by root view */ Button bt = (Button) v.getRootView().findViewById(R.id.btId); /*check for button */ if(bt!=null) { /** disable button view */ ... } else { /** according to @jeroen-bollen remark * we made assumption that we expected a view * of type button here in other any case */ throw new IllegalArgumentException("Wrong argument: " + "View passed to method is not a Button type!"); } } } }); 

EDIT: En respuesta a @ jeroen-bollen

  View.OnClickListener 

Es la definición de Interfaz para una llamada a invocarse cuando se hace clic en una vista.

Con la definición del método

 void onClick(View v); 

Cuando se hace clic en la vista el objeto de la clase View devuelve la llamada al método onClick () enviando como parámetro en sí, por lo que el parámetro de vista nula no debería ocurrir si lo hace es un Error de Aserción podría ocurrir por ejemplo cuando la clase de objeto View fue destruida mientras tanto Ejemplo recogido por GC) o el método fue alterado debido a hack

Poco sobre instanceof & null

JLS / 15.20.2. Comparación de tipos Operador instanceof

En tiempo de ejecución, el resultado del operador instanceof es true si el valor de RelationalExpression no es nulo y la referencia podría convertirse en el ReferenceType sin elevar un ClassCastException.

De lo contrario, el resultado es falso .


Tres palabras del autor

SI PIDES PORQUÉ?

MOSTLY TO AVOID NullPointerException

Un poco más de código ahorrará tiempo en el seguimiento posterior de errores en su código y reducirá la ocurrencia de anomalías.

Considere el siguiente ejemplo:

 View.OnClickListener listener = new OnClickListener() { @Override public void onClick(View v) { btnSend.setClickable(false); } }); btnSend.setOnClickListener(listener) btnCancel.setOnClickListener(listener) 
  • ¿Cómo configurar el margen derecho del cajón de navegación?
  • Android: ¿Cómo generar automáticamente código Java desde el archivo de diseño?
  • Cómo configurar la altura máxima de un Layout en android?
  • Cómo cambiar el icono de un botón mediante programación?
  • Cómo cambiar el diseño del widget de fondo mediante programación
  • Android personalizado RatingBar imagen de los artefactos
  • Configuración de Android LinearLayout de fondo mediante programación
  • Cómo forzar un diseño completo ¿Ver actualizar?
  • ¿Es concatenación de cadenas de recursos / concatenación de cadenas, posible en el archivo de diseño?
  • Vista personalizada en la disposición xml
  • Cambiar / usar múltiples diseños dentro de la misma actividad?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.