En iOS, si configuro el fondo de un botón para una imagen, cuando presiono el botón, se sombreará todo el contenido del botón (incluido el texto). ¿Puedo lograr el mismo efecto en Android, o tengo que usar diferentes imágenes para diferentes estados? Además, incluso si uso diferentes imágenes para diferentes estados, ¿cómo hago que el texto también se sombree? Una forma sucia es establecer un OnClickListener
en el botón y sombrear el texto de forma programada cuando se presiona, pero ¿hay otras formas?¿Alterar automáticamente el fondo del botón y la apariencia del texto cuando se presiona (como iOS)?
¿Alterar automáticamente el fondo del botón y la apariencia del texto cuando se presiona (como iOS)?
Respuesta
He estado tratando de encontrar una solución para esto desde hace un tiempo, pero no pude encontrar nada, así que se me ocurrió una solución bastante limpia que funciona en todos los botones de imagen. Al igual que iOS.
Cree una imagen negra, 10% transparente y guárdela como PNG. Lo llamo button_pressed.png. Usted puede utilizar esta imagen, http://img84.imageshack.us/img84/7924/buttonpressed.png
Crear una dibujable llamado algo relevante, lo llamo "button_pressed_layout.xml"
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android=" http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/button_pressed" /> </selector>
Ahora ponga su imagen del botón en el LinearLayout y luego el botón dentro de la LinearLayout . En el botón, use button_pressed_layout.xml como fondo.
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/button_image"> <Button android:id="@+id/myButtonId" android:text="@string/Continue" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/button_pressed_layout" android:textColor="#FFF" android:textSize="16dp" > </Button> </LinearLayout>
eso es todo!
Para obtener un estado presionado sin crear una imagen de 2º botón, creé un OnTouchListener para cambiar el alfa del botón. Este no es el estado presionado más hermoso, pero ofrece un comportamiento automático efectivo.
public class PressedStateOnTouchListener implements OnTouchListener
{
PressedStateOnTouchListener(float alphaNormal)
{
mAlphaNormal = alphaNormal;
}
public boolean onTouch(View theView, MotionEvent motionEvent)
{
switch(motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
theView.setAlpha(mAlphaNormal/2.0f);
break;
case MotionEvent.ACTION_UP:
theView.setAlpha(mAlphaNormal);
break;
}
// return false because I still want this to bubble off into an onClick
return false;
}
private float mAlphaNormal;
}
En su actividad, aplicar este oyente a cada botón:
Button theButton = (Button)findViewById(R.id.my_button_id);
theButton.setOnTouchListener(new PressedStateOnTouchListener(theButton.getAlpha()));
Esto da el "opuesto" de un estado presionado. Debes oscurecer la imagen para mostrarla presionada, no aclararla. y sobre un fondo blanco esto lo aclara. – dacopenhagen
- 1. cambiar el color del botón de texto cuando se presiona
- 2. alterar la apariencia del teclado en nativo, PhoneGap/Cordova construido iOS App
- 3. Detectar cuando se presiona el botón de inicio iOS
- 4. Fondo del botón como transparente
- 5. Android cómo hacer que el texto del botón sea negrita cuando se presiona o se enfoca
- 6. Cambiar el color del texto del botón cuando se selecciona
- 7. Evite la pérdida de variables cuando se presiona el botón de recarga del navegador
- 8. Menú contextual de Stardand en el widget de texto de Python TKinter cuando se presiona el botón derecho del mouse
- 9. Accediendo a LocalStorage cuando se presiona el botón de inicio en Phonegap/iOS
- 10. Aumenta continuamente el valor entero cuando se presiona el botón
- 11. Cambiar el fondo del botón al tacto
- 12. guarda el estado cuando se presiona el botón Atrás
- 13. Repita una acción cuando se presiona el botón largo
- 14. cambiar la dirección del texto del cuadro de texto automáticamente
- 15. setResult no funciona cuando se presiona el botón ATRÁS
- 16. ¿Cómo elimino una actividad cuando se presiona el botón Atrás?
- 17. Averiguar el color del texto basado en la opinión del fondo IOS de color
- 18. Selector de fondo del botón
- 19. Cambiar el texto y la acción del botón - android development
- 20. Establezca el alto y el ancho del botón como contenido de relleno y relleno principal
- 21. Borrar el foco EditText cuando se presiona el botón Atrás cuando el teclado está mostrando
- 22. ¿Cómo hacer que el elemento no pierda el foco cuando se presiona el botón?
- 23. ¿El color de fondo cambiante en Android destruye la apariencia del widget?
- 24. android: acción del teclado de pantalla cuando se presiona la tecla Listo
- 25. Fondo del botón de Android como forma con Shadow
- 26. Android - Detener AsyncTask cuando se presiona el botón Atrás y volver a la Actividad anterior
- 27. IOS - Personalización del botón Cancelar UISearchBar
- 28. Cancelar AsyncTask cuando el usuario presiona el botón
- 29. El texto del botón no se centra verticalmente en el botón
- 30. Cómo detectar cuando se presiona y suelta el botón en android
Es un botón de activación, donde el estado puede ser hacia arriba o hacia abajo, o un botón normal en el que sólo se ve diferente, ya que es haciendo clic en? – TomHarrigan
Es un botón normal. – hzxu