Tengo un estilo LinearLayout
que he diseñado para que se parezca a un button
, y contiene algunos elementos de texto / ImageView. Me gustaría hacer todo el LinearLayout
acto como a button
, en particular para darle estados que están definidos en a para que tenga un fondo diferente cuando se presiona.
¿Hay una mejor manera que hacer un ImageButton
tamaño de todo el diseño y posicionarlo absolutamente?
android
android-layout
Jason Prado
fuente
fuente
LinearLayout
comoToggleButton
Respuestas:
Me encontré con este problema hace un momento. Tendrá que configurar LinearLayout para hacer clic. Puede hacer esto en el XML con
O en código con
¡Salud!
fuente
android:clickable="false"
para evitar que bloquee los eventos de clic.Si desea agregar el comportamiento de fondo predeterminado de Android para que
Layout
actúe como un "clikable"View
, configure el objetivoLayout
:API 11+ (Android puro):
API 7+ (Biblioteca de compatibilidad de Android + AppCompat):
Cualquier API:
Las respuestas anteriores siguen siendo ciertas, pero no me ayudaron simplemente a agregar el estado predeterminado de IU presionado y liberado (como en,
ListView
por ejemplo).fuente
Usé la primera y la segunda respuesta. Pero mi diseño lineal tiene imágenes y texto con color de fondo, así que tuve que cambiar "fondo" a "primer plano"
diseño lineal
fuente
Primero querrá un selector para definir los diferentes estados. Por ejemplo, en un archivo XML:
No lo he probado, pero es posible que pueda configurar el android: background de LinearLayout en este selector y configurar android: clickable en true y funcionará.
Si no es así, puede cambiar a un RelativeLayout y hacer que el primer elemento sea un botón con este selector como fondo y fill_parent para su ancho y alto de diseño. En este caso, simplemente use un botón normal y configure android: background en su selector. No tienes que poner texto en tu botón.
fuente
Button
. Puede anularonDraw(Canvas)
para hacer cualquier cosa especial que necesite (es decir, dibujar imágenes o texto dentro del botón).En la aplicación en la que estoy trabajando, necesito crear un LinearLayout dinámicamente. En este caso el comando
no está funcionando como se supone que debe hacerlo. Aunque me pueda perder algo, logré explotar setOnTouchListener para obtener el mismo resultado y envío el código en caso de que alguien tenga las mismas necesidades.
El siguiente código crea un LinearLayout con dos vistas de texto y esquinas redondeadas, cambiando de color cuando se presiona.
Primero, cree dos archivos xml en la carpeta dibujable, uno para el estado normal y otro para el estado de diseño lineal presionado.
XML de estado normal (dibujable / bordes redondeados_normal.xml)
XML de estado presionado (dibujable / bordes redondeados_presionado.xml). La única diferencia está en el color ...
Entonces el siguiente código hace el trabajo
Variable global:
En
onCreate()
:fuente
Simplemente configure estos atributos
fuente
Simplemente agregue attr de fondo / selectableItemBackground al diseño lineal y también haga que se pueda hacer clic en ese diseño lineal
ejemplo:
Eso hace que el diseño lineal actúe como un botón cuando se presiona. :)
fuente
Esto fue útil, pero si desea poner un color de fondo y hacer clic en el diseño lineal como el elemento de la lista. Establezca el fondo con su color preferido y establezca el color de primer plano en? Android: attr / selectableItemBackground, establezca enfocable verdadero y haga clic en verdadero
Código de muestra
fuente
Las respuestas anteriores trataban sobre cómo establecer el fondo predeterminado en un archivo xml. Aquí lo mismo en el código:
fuente