当我尝试将常规按钮和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>
答案 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>