Cómo mantener la relación de aspecto fijo para un botón en android

Tengo un conjunto de botones en un diseño horizontal. He fijado una imagen drenable como el fondo para cada uno de estos botones. Pero cuando hago el diseño lineal para abarcar el ancho de la pantalla, los botones pierden su relación de aspecto. Quiero mantener su relación de aspecto como es. Quiero decir que tengo que mantener en forma cuadrada a través de la aplicación lo que nunca la resolución de la pantalla es. Cómo puedo hacer esto. Cualquier sugerencia es apreciada.

Aquí está mi XML

<?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:background="@drawable/main_background" android:baselineAligned="false" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/answer_bg" android:padding="10dip" > <Button android:id="@+id/b2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/img_background" android:height="50dip" android:text="@string/x" android:textStyle="bold" /> <Button android:id="@+id/b3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/img_background" android:height="50dip" android:text="@string/x" android:textStyle="bold" /> <Button android:id="@+id/b4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/img_background" android:height="50dip" android:text="@string/x" android:textStyle="bold" /> </LinearLayout> </LinearLayout> 

Gracias

Estoy dando una mejora a su XML. No lo he probado, pero debería funcionar. Los cambios sugeridos son, en lugar de configurar la imagen como fondo, establecerla como src para ImageButtons. Además, si insiste en el botón, puede envolver cada uno de los botones con otro diseño y establecer su propiedad de gravedad en "centro". Echa un vistazo al siguiente XML.

 <?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:background="@drawable/main_background" android:baselineAligned="false" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/answer_bg" android:padding="10dip" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" > <Button android:id="@+id/b2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/img_background" android:height="50dip" android:text="@string/x" android:textStyle="bold" /></LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" > <Button android:id="@+id/b3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/img_background" android:height="50dip" android:text="@string/x" android:textStyle="bold" /></LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" > <Button android:id="@+id/b4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/img_background" android:height="50dip" android:text="@string/x" android:textStyle="bold" /></LinearLayout> </LinearLayout> </LinearLayout> 

Siéntase libre de preguntar si no funciona.

Si desea una forma cuadrada exacta significa que debe ajustar el ancho y la altura para el mismo valor.

Si desea ajustar los 3 botones con la misma forma en la disposición horizontal independientemente de las resoluciones de la pantalla, use layout_weight = 1 . A mi conocimiento sobre las disposiciones, sólo esta es la solución.

Aquí estoy usando el peso para la disposición usted puede intentar como este. Fije el weightsum para la disposición linear y después fije el ancho del botón como 0dp y el peso según su necesidad.

 <?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:background="@drawable/main_background" android:baselineAligned="false" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/answer_bg" android:padding="10dip" android:weightSum="1" > <Button android:id="@+id/b2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight=".33" android:background="@drawable/img_background" android:text="@string/x" android:textStyle="bold" /> <Button android:id="@+id/b3" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight=".33" android:background="@drawable/img_background" android:height="50dip" android:text="@string/x" android:textStyle="bold" /> <Button android:id="@+id/b4" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight=".33" android:background="@drawable/img_background" android:text="@string/x" android:textStyle="bold" /> </LinearLayout> </LinearLayout> 
  • BringToFront no funciona en RecyclerView
  • Android Studio: Nuevo directorio creado que no aparece en la vista de carpetas
  • Dibujar círculo HSV en tiempo de ejecución
  • Cómo utilizar isInEditMode () para ver el diseño con la vista personalizada en el editor
  • Alinear drawableLeft con el texto del botón
  • Carpeta extraíble android para pantallas grandes
  • ¿El inflador requiere el contexto de la Actividad?
  • Cajón de navegación resaltar elemento seleccionado no funciona
  • Interface Builder (Diseñador de interfaz de usuario) para Android
  • Android Gridview - Linear layout_height que se ignora
  • Android TextView en texto BOLD y Normal
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.