2010-05-09 9 views
15

¿Cómo puedo establecer un ancho fijo para un botón de Android? Cada vez que intento establecer un ancho fijo, rellena el elemento principal actual (RelativeView). Aquí está mi XML:Establecer ancho de botón en Android

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout android:id="@+id/relativelayout" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> 

    <EditText android:layout_height="wrap_content" android:editable="false" android:layout_width="fill_parent" android:id="@+id/output"></EditText> 

    <Button android:layout_height="wrap_content" android:id="@+id/Button01" android:layout_below="@id/output" android:text="7" android:layout_width="wrap_content"></Button> 
    <Button android:layout_below="@id/output" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/Button02" android:layout_toRightOf="@+id/Button01" android:text="8"></Button> 
    <Button android:layout_below="@id/output" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/Button03" android:layout_toRightOf="@+id/Button02" android:text="9"></Button> 
</RelativeLayout> 

¿Cómo se le daría un ancho FIJO?
ACTUALIZACIÓN
Digamos que tengo varios botones que quiero del mismo tamaño que el otro y 1/3 de toda la vista (Retrato), luego quiero un botón con el doble de ancho. Luego un botón con el doble de altura. ¿Cómo podría lograr esto otro que dimensionándolos manualmente?

Respuesta

12

Para lograr lo que desea, se puede utilizar un LinearLayout con un weightsum. Por ejemplo, puedes poner un WeightSum de 9. Si pones el peso de tres botones dentro de 1 cada uno. Tomarán 1/3 del lugar, y puedes poner 2 para otro objeto. Este objeto será el doble de grande que el otro.

http://developer.android.com/reference/android/widget/LinearLayout.html#setWeightSum(float)

Editar: Me gustaría añadir que para que esto funcione correctamente, se tiene que establecer la anchura o la altura a 0px (dependiendo de si se trata de una horizontal o una disposición vertical).

12

En lugar de android:layout_width="wrap_content" se puede utilizar un pixelsize fijo como por ejemplo android:layout_width="20px" o una mejor manera: android:layout_width="20dp"

también puede establecer el ancho mediante programación en el código: Button.setWidth(int width)

cuanto a su actualización

No sé si es una buena solución, pero yo trabajo. Se podría utilizar

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 

a leer la resolución de la pantalla y luego ajustar los tamaños de botón según la metrics.widthPixel y metrics.heightPixel

+0

lo que es pd en 20pd .. como se muestra arriba, por ej. En lugar de android: layout_width = "wrap_content" puede usar un pixelsize fijo como por ejemplo android: layout_width = "20px" o una forma mejor: android: layout_width = "20pd" –

+1

creo que debería haber sido 'density pixel'' dp 'http: // stackoverflow.com/questions/2025282/difference-of-px-dp-dip-and-sp-in-android –

+0

dp es un pixel independiente de densidad. La idea es que si usas este Android, lo aumentará o disminuirá dependiendo del tamaño de la pantalla. Puede ver las páginas de los desarrolladores para obtener más información: http://developer.android.com/guide/practices/screens_support.html – Jonny

6

Use minWidth y minHeight para establecer el ancho y alto de un botón.

<Button android:layout_height="wrap_content" 
android:id="@+id/Button01" 
android:layout_below="@id/output" 
android:text="7" 
android:minWidth="100dp"> 
</Button> 
3

La forma mejor y más fácil de configurar un botón dinámicamente es

Button index=new Button(this); 
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 45, getResources().getDisplayMetrics());    
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 42, getResources().getDisplayMetrics()); 

La altura y la anchura en píxeles px. 45 siendo la altura en dp y 42 siendo el ancho en dp.

index.setLayoutParams(new <Parent>.LayoutParams(width, height)); 

Así, por ejemplo, si usted ha colocado el botón dentro de un TableRow dentro de un TableLayout, usted debe tener como TableRow.LayoutParams

index.setLayoutParams(new TableRow.LayoutParams(width, height)); 
0

añadir android:minwidth línea en ese código.

+1

¿Puede intentar elaborar un poco más y aclarar dónde se debe agregar? – Polygnome

+0

el botón que desea ampliar el tamaño agrega esta línea y menciona "20dp" como este –

Cuestiones relacionadas