为什么相同的layout_weight导致Android ImageButton和Button的宽度不同?

时间:2017-01-11 03:53:34

标签: android android-layout android-imagebutton android-layout-weight

当我尝试将常规按钮和ImageButton设置为相同的layout_weight时,我在LinearLayout中得到了一些奇怪的行为。图像按钮的android:src资源非常小,非常适合ImageButton,没有任何问题。即使它们的宽度应该相同,但由于某种原因,ImageButton的宽度大约是正常按钮其余部分的2/3。如果我将ImageButton的layout_weight乘以10,它更接近正确的大小,但为什么这不起作用?

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_weight="1">
    <Button
            android:id="@+id/clear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/clear"/>
    <Button
            android:id="@+id/left_paren"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/left_paren"/>
    <Button
            android:id="@+id/right_paren"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/right_paren"/>
    <ImageButton
            android:id="@+id/backspace"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:contentDescription="@string/backspace"
            android:src="@drawable/backspace"/>
</LinearLayout>

2 个答案:

答案 0 :(得分:6)

您需要为宽度相同的所有按钮设置android:layout_width="0dp"。 (更确切地说,您需要为所有这些按钮设置相同的layout_width,并且0dp是要使用的常规宽度。当使用相等的权重时,只要还有额外的空间来分配,实际的宽度您使用与结果无关。)layout_weight仅确定在按钮占用其指定宽度后如何分配剩余空间。因此,如果他们开始不平等(他们的宽度为wrap_content),他们在考虑权重后仍然不同。

答案 1 :(得分:0)

您需要为所有视图设置相同的android:layout_weight,并将android:layout_width设置为0dp,以便为所有视图获得相等的宽度部分。

  <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal">

        <Button
            android:id="@+id/clear"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/clear" />

        <Button
            android:id="@+id/left_paren"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/left_paren" />

        <Button
            android:id="@+id/right_paren"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/right_paren" />

        <ImageButton
            android:id="@+id/backspace"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:contentDescription="@string/backspace"
            android:src="@drawable/plus" />
    </LinearLayout>