¿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?
- La casilla de verificación personalizada muestra diferentes diseños para 2,3 y 4,2
- Android, programatically diseño de una vista de botón?
- Escala de la imagen de fondo en LinearLayout
- Android cómo obtener altura y ancho en onCreateView
- Android: Cómo configurar las variables dimen de XML mediante programación
- Stackoverflow: ¿Causado por vistas anidadas?
- Do onMeasure en Android devuelve Tamaño incluyendo relleno y margen?
- ¿Cómo puedo encontrar los parámetros de diseño del widget tostado?
- Obtener las dimensiones de la pantalla en píxeles
- Bloquear la orientación de la pantalla (Android)
- Esta visión no está restringida
- Mutiple fragmentos en un vertical Linearlayout
- Android: ¿Cómo evito que el teclado suave empuje mi vista hacia arriba?
¿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)
- Hacer que el emulador de Android funcione más rápido
- "Conversión al formato Dalvik falló con error 1" en JAR externo