2011-08-26 9 views
12

Tengo dos botones en el diseño, y en un dispositivo de pantalla grande (tabletas) quiero tapar su ancho para que no se vean ridículos. Esperaba usar el atributo maxWidth pero aparentemente no hace nada en mi escenario. Aquí está la definición del diseño: los botones utilizan todo el ancho del diseño, ignorando cualquier valor en maxWidth.¿Por qué maxWidth en un botón no funciona y cómo solucionarlo?

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
> 
<Button 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:maxWidth="100dp" 
    android:text="Button 1" 
/> 
<Button 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:maxWidth="100dp" 
    android:text="Button 2" 
/> 
</LinearLayout> 

¿Por qué y cómo solucionar este problema (aparentemente loco)?

+0

¿Por qué los botones layout_width 0dp y not wrap_content? – antlersoft

+0

@antlersoft - 0dp de ancho en combinación con un layout_weight que coincida con el de los elementos hermanos garantizará que tengan el mismo ancho que el otro – ataulm

Respuesta

11

Elimine la línea android:layout_weight="1" de ambos botones.
Añadir android:minWidth="50dp" y android:layout_width="wrap_content"

EDIT:

es necesario calcular los tamaños del botón manualmente en función del tamaño de la pantalla. Primero necesita tener un tamaño de pantalla estándar establecido. Por ejemplo, Si la desarrollas la aplicación en un ancho de la pantalla 400 píxeles, y el botón se 100px de ancho, entonces la fórmula para mantener la misma relación de button width to screen width en todos los dispositivos será el siguiente

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 
buttonWidth = 100 * (metrics.widthPixels/400); 

Caso de uso:
Si ancho de pantalla = 480px, luego el ancho del botón debe ser 120px.

+2

¿Por qué? Los botones no se escalarán en absoluto, y tendrán un ancho de cero –

+0

Eso es lo que hace que los botones se estiren para ocupar todo el ancho del diseño. Establezca también el ancho de vía y cambie el ancho a 'wrap_content' no a 0dp. – Ronnie

+0

Si elimino el layout_weight, el botón no se escalará, que es lo que quiero que haga. Quiero un botón que se adapte al tamaño de los dispositivos, pero solo a un tamaño máximo. –

0

Pruebe a configurar el layout_width para wrap_content frente a 0dp.

+0

Esta es una de las muchas variantes que he probado. No hace ninguna diferencia. –

0

anchura/altura parece siempre haber existido para ser fijado juntos, .. Esto está trabajando en mi opinión

 <Button 
      android:text="Center" 
      android:layout_width="100dp" 
      android:layout_height="fill_parent" 
      android:id="@+id/selectionCenterButton" 
      android:minWidth="50dp" 
      android:minHeight="50dp" 
      android:maxWidth="100dp" 
      android:maxHeight="50dp" 
      android:layout_weight="1" /> 

El padre del botón se establece para envolver el contenido, por lo que disminuye la escala, pero hasta un máximo de 400 de ancho (4 botones)

+0

no funcionó para mí. –

Cuestiones relacionadas