Tamaño del botón relativo al tamaño del padre en el diseño XML?

¿Es posible establecer en el archivo de diseño XML el tamaño del botón de modo que, por un lado, no tome todo el ancho del padre (pantalla) y, por otro lado, no utilice valores de píxeles absolutos ?

Para explicar mejor mi pregunta, el problema en el fragmento siguiente es que "match_parent" toma todo el ancho:

 <Button android:id="@+id/btn_1" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="16px" android:paddingLeft="16px" android:paddingRight="16px" android:paddingTop="16px" android:text="@string/first_button" /> 

Sé que es posible controlar el tamaño durante el tiempo de ejecución, pero estoy interesado en saber si esto es posible en un archivo XML también.

¿Hay algo como android:layout_width="match_HALF_parent" ?

El ejemplo en bruto podría ser así:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:text="Button" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginBottom="100dp" android:layout_marginTop="100dp" android:layout_marginLeft="50dp" android:layout_marginRight="50dp" ></Button> </LinearLayout> 

Alternativamente, puede configurar android:padding a su diseño en lugar de margen a botón.

Los pesos de diseño pueden hacer esto. Básicamente, lo que debe hacer es establecer un weightSum en el diseño padre y, a continuación, establecer un layout_weight en el niño:

 <?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="fill_parent" android:weightSum="2" android:orientation="horizontal"> <Button android:id="@+id/btn_1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:paddingBottom="16px" android:paddingLeft="16px" android:paddingRight="16px" android:paddingTop="16px" android:text="@string/first_button" /> </LinearLayout> 

Es la relación entre el peso del padre y el peso del niño que determina el ancho del niño: en este caso será la mitad; Si tuviéramos que aumentar la suma de peso de los padres a 3, el niño sería un tercio del ancho de su padre.

He escrito sobre esto en mi blog .

La solución es anidar varios LinearLayouts . Usa un LinearLayout vertical como un contenedor y apila LinerarLayouts horizontal en él. Cada uno de los horizontales con un peso:

 android:layout_weight="0.5" 

También debe asegurarse de establecer los anchos y alturas de la siguiente manera:

 android:layout_width="match_parent" android:layout_height="match_parent" 

Finalmente, usted llena estos Layouts horizontales con Widgets (por ejemplo Botones) y les da un peso, también.

Una fuente podría parecer el siguiente fragmento:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:background="@drawable/bg" tools:context=".MainActivity"> <!--parent container--> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <!--child container--> <!--each horizontal layout gets 1/3 of remaining space--> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_weight="0.5" android:layout_height="match_parent"> <Button android:background="@color/colorPrimary" android:layout_width="fill_parent" android:layout_weight="1" android:layout_height="fill_parent" android:text="100%" android:textSize="60dp"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_weight="0.5" android:layout_height="match_parent"> <Button android:background="@color/colorPrimary" android:layout_width="fill_parent" android:layout_weight="0.5" android:layout_height="fill_parent" android:text="50%" android:textSize="60dp"/> <Button android:background="@color/colorPrimaryDark" android:layout_width="fill_parent" android:layout_weight="0.5" android:layout_height="fill_parent" android:textSize="60dp" android:text="50%"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_weight="0.5" android:layout_height="match_parent"> <Button android:background="@color/colorPrimary" android:layout_width="fill_parent" android:layout_weight="0.7" android:layout_height="fill_parent" android:text="30%" android:textSize="60dp"/> <Button android:background="@color/colorPrimaryDark" android:layout_width="fill_parent" android:layout_weight="0.3" android:layout_height="fill_parent" android:allowUndo="false" android:text="70%" android:textSize="60dp"/> </LinearLayout> <!-- Just for spacing--> <RelativeLayout android:layout_width="match_parent" android:layout_height="20dp"> </RelativeLayout> </LinearLayout> </LinearLayout> 

Para obtener esto como resultado:

Pila LinearLayout

  • Diseño de pantalla múltiple de Android
  • Imageview height como wrap_content de la imagen mostrada
  • Google Currents como estilo de lectura página por página
  • Altura de diseño de Android mínima de match_parent, pero wrap_content si el contenido es mayor que parent
  • Borde de Android Menos Botón Presionado Estado Color de fondo
  • Layout_height siempre envuelve el contenido
  • ¿Existe una manera sencilla de medir la distancia entre un punto y un grupo VectorDrawable?
  • Creación de Gridview con imágenes seleccionables, Android
  • Distribución de espacio LinearLayout
  • Cambiar el color de texto de Time Picker
  • ¿Cómo centrar los elementos de una revista de reciclaje?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.