¿Por qué los botones se extienden para cubrir todo el layout_weight asignado
Estoy tratando de conseguir 3 botones alineados (izquierda, centro, derecha). Sé que probablemente se puede hacer con gravedad, pero estoy tratando de entender el concepto de layout_weight aquí. Estoy usando este código:
<LinearLayout id=.. layout_width = "wrap_content" layout_height = "wrap_content" orientation="Horizonta" > <Button id=1 layout_width = "wrap_content" layout_height = "wrap_content" layout_weight = "1" text= "text" /> <Button id=2 layout_width = "wrap_content" layout_height = "wrap_content" layout_weight = "1" text= "text" /> <Button id=3 layout_width = "wrap_content" layout_height = "wrap_content" layout_weight = "1" text= "text" /> </LinearLayout>
Sin embargo, estoy consiguiendo la parte SUPERIOR de la imagen abajo. Cual es correcta. La pregunta es ¿por qué es el botón estirado para cubrir todo el área que se asigna mientras estoy usando wrap_content? ¿Cómo puede hacerlo como la imagen de fondo?
- Disposición de restricciones de Android mediante programación?
- Cómo desplazamiento mediante programación de un ScrollView a inferior
- GridView o TableLayout?
- Ocultar teclado después de búsquedas de usuarios?
- Cambiar dinámicamente la altura de la fila en una vista de lista basada en el número de elementos de la lista
Gracias
- Disposición de Android: cuándo utilizar la aplicación: vs android :?
- Cómo configurar el encabezado y el pie de página para el diseño lineal en android
- Cómo agregar un atributo de tema a android: startColor en gradiente dibujable en Android?
- Android ViewPager findViewById no funciona - siempre devuelve null
- ¿Cómo puedo superponer una sombra en un ScrollView?
- Ampliación del ancho del degradado centerColor en Android
- Principiante Android Development: findViewById issue
- ActionBarSherlock & HoloEverywhere - Forzar el desbordamiento?
El layout_weight se utiliza para indicar cómo se debe dividir el espacio libre adicional en la pantalla entre los widgets. En este caso tenemos tres botones con el mismo layout_weight y por lo tanto los botones crecerán tanto hasta que todo el espacio libre haya desaparecido.
Debe intentar algo más para obtener los botones de tamaño original y la alineación que lo que queremos (izquierda – centro – derecha). Un problema es que el LinearLayout horizontal no es completamente colaborativo cuando se trata de respetar los parámetros de layout_gravity. Podremos usar los parámetros de layout_gravity que afectan a la alineación vertical, pero horizontales son ignorados por el parent LinearLayout, suspiro otro callejón sin salida.
Una solución es poner algo entre los botones que los empuja en el lugar correcto en la pantalla. La vista Espacio fue introducida en API 14 (Ice Cream Sandwich) y es adecuada para ser usada para esto.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Space android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight = "1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Space android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight = "1" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout>
Las vistas Espacio también se pueden reemplazar con un par de TextViews vacíos para que el diseño funcione en dispositivos que ejecutan niveles API anteriores.
<TextView android:id="@+id/textView1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1.0" android:text="" />
Cuando se utiliza el peso, la anchura de diseño se ommited y sólo se utiliza el algoritmo de peso y, a continuación, estirar el elemento.
Tus botones llenan el espacio porque usas layout_weight="1"
que indica a los botones que tomen el espacio adicional disponible, también porque el atributo layout_weight
es 1 para todos los botones que tomarán el mismo espacio y tendrán el mismo tamaño. No puedes obtener ese diseño inferior usando el layout_weight
, usa layout_gravity
para posicionarlos (aquí hay otra pregunta sobre esto. ¿Qué significa android: layout_weight? ).
Si desea la imagen siguiente, pruebe lo siguiente:
<LinearLayout id=.. layout_width = "wrap_content" layout_height = "wrap_content" orientation="Horizonta" > <Button id=1 layout_width = "wrap_content" layout_height = "wrap_content" android:layout_gravity="left" text= "text" /> <Button id=2 layout_width = "wrap_content" layout_height = "wrap_content" android:layout_gravity="center_horizontal" text= "text" /> <Button id=3 layout_width = "wrap_content" layout_height = "wrap_content" android:layout_gravity="right" text= "text" /> </LinearLayout>