为什么Button上的maxWidth不起作用以及如何解决它?

时间:2011-08-26 13:23:00

标签: android android-layout android-button

我在布局上有两个按钮,在大屏幕设备(平板电脑)上我想要限制它们的宽度,这样它们看起来并不荒谬。我希望使用maxWidth属性,但它在我的场景中显然没有任何作用。这是布局定义 - 按钮占用布局的整个宽度,忽略maxWidth中的任何值。

<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>

为什么以及如何解决这个(显然是疯狂的)限制?

4 个答案:

答案 0 :(得分:11)

从两个按钮中删除android:layout_weight="1"行。
添加android:minWidth="50dp"android:layout_width="wrap_content"

编辑:

您需要根据屏幕尺寸手动计算按钮尺寸。首先,您需要设置标准屏幕尺寸。例如,如果您在宽度为400px的屏幕上开发应用程序,并且按钮宽度为100px,那么在所有设备上保持相同button width to screen width比例的公式将如下所示

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

使用案例:
如果屏幕宽度= 480px,则按钮宽度应为120px。

答案 1 :(得分:3)

解决这个问题的好方法是为不同的屏幕分辨率组合创建多个布局。当您达到某个最大拉伸时,创建一个在需要时具有固定值的新布局。请参阅http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters

中有关“使用布局别名”的部分

答案 2 :(得分:0)

尝试将layout_width设置为wrap_content vs. 0dp。

答案 3 :(得分:0)

宽度/高度似乎总是要设置在一起,..这在我看来是

        <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" />

按钮的父级设置为包装内容,因此缩小,但最多400宽(4个按钮)