2010-05-09 5 views
15

Как установить фиксированную ширину для кнопки Android? Каждый раз, когда я пытаюсь установить фиксированную ширину, он заполняет текущего родителя (RelativeView). Вот мой XML:Установите ширину кнопки в 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> 

Как бы присвоить ему ФИКСИРОВАННУЮ ширину?
UPDATE
Скажите, что у меня есть несколько кнопок, которые я хочу иметь одинаковый размер, и один и третий вид (Портрет), тогда я хочу кнопку с двойной шириной. Затем нажмите кнопку с двойной высотой. Как я мог выполнить это другое, чтобы вручную их определить?

ответ

12

Чтобы сделать то, что вы хотите, вы можете использовать LinearLayout с weightsum. Например, вы можете установить WeightSum из 9. Если вы поместили вес трех кнопок внутрь по 1 на каждый. Они возьмут 1/3 места, и вы можете поставить 2 для другого объекта. Этот объект будет в два раза больше, чем другой.

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

Edit: Я хотел бы добавить, что для этого, чтобы работать правильно, вы должны установить ширину или высоту 0px (в зависимости от если это горизонтального или вертикального макета).

12

Вместо android:layout_width="wrap_content" вы можете использовать фиксированный pixelsize, как, например, android:layout_width="20px" или лучший способ: android:layout_width="20dp"

вы также можете установить ширину программно в коде: Button.setWidth(int width)

Что касается вашего обновления:

Я не знаю, если это хорошее решение, но я работаю. Вы можете использовать

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

читать разрешение экрана, а затем установить размеры кнопок в соответствии с metrics.widthPixel и metrics.heightPixel

+0

Что такое pd в 20pd .. как показано выше, например. Вместо android: layout_width = «wrap_content» вы можете использовать фиксированный пикселиз, например, android: layout_width = «20px» или лучший способ: android: layout_width = «20pd» – 2011-09-03 04:19:43

+1

Я считаю, что это должен быть «пиксель плотности» dp 'http: // stackoverflow.com/questions/2025282/difference-of-px-dp-dip-and-sp-in-android –

+0

dp - независимый от плотности пиксель. Идея заключается в том, что если вы используете этот Android, он будет масштабировать его вверх или вниз в зависимости от размера экрана. Вы можете увидеть страницы разработчиков для получения дополнительной информации: http://developer.android.com/guide/practices/screens_support.html – Jonny

6

Используйте minWidth и minHeight, чтобы установить ширину и высоту кнопки.

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

Самый лучший и простой способ установить кнопку динамически является

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()); 

Высота и ширина в пикселях точек. 45 - высота в dp и 42 - ширина в dp.

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

Так, например, если вы разместили свою кнопку в TableRow внутри TableLayout, вы должны иметь как TableRow.LayoutParams

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

добавить android:minwidth строку в этом коде.

+1

Можете ли вы попытаться подробнее описать, где это нужно добавить? – Polygnome

+0

кнопка, которую вы хотите расширить размер, добавьте эту строку и укажите «20dp», как это –

Смежные вопросы