LinearLayout无法正确居中 上下两行按钮间距不匹配问题求助
问题原因
现有布局中两个LinearLayout都设置了gravity="center",每一行的两个按钮作为整体水平居中,因为两行按钮的总宽度不同,导致中间的间距无法对齐。以下是两种符合要求的实现方案,均不会修改原有按钮宽度:
方案1:保留现有LinearLayout结构修改
仅需在每个LinearLayout内部添加占位View和固定间距的Space控件即可,修改后代码如下:
<androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="50dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@+id/layout_contenedorContador"> <LinearLayout android:id="@+id/layout_botonRespuesta" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="50dp" android:orientation="horizontal" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/layout_textoPregunta"> <!-- 左侧占位空白View --> <View android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1" /> <Button android:id="@+id/button7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/quiz_falso" /> <!-- 固定间距,两行的该参数保持一致即可 --> <Space android:layout_width="24dp" android:layout_height="match_parent" /> <Button android:id="@+id/button6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/quiz_verdadero" /> <!-- 右侧占位空白View --> <View android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout> <LinearLayout android:id="@+id/layout_botonNav" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:orientation="horizontal" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/layout_botonRespuesta"> <!-- 左侧占位空白View --> <View android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1" /> <Button android:id="@+id/button10" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/quiz_atras" /> <!-- 和上一行的间距值保持一致 --> <Space android:layout_width="24dp" android:layout_height="match_parent" /> <Button android:id="@+id/button8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/quiz_siguiente" /> <!-- 右侧占位空白View --> <View android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
该方案核心是左右用weight=1的空白View平分两侧剩余空间,中间用固定宽度的Space控制按钮间距,两行Space宽度统一即可实现间距完全对齐。
方案2:移除嵌套LinearLayout,直接用ConstraintLayout实现
如果可以调整布局结构,直接用ConstraintLayout摆放四个按钮,约束逻辑更清晰、布局性能更好:
<androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="50dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@+id/layout_contenedorContador"> <Button android:id="@+id/button7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/quiz_falso" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toStartOf="@id/button6" app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="50dp"/> <Button android:id="@+id/button6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/quiz_verdadero" app:layout_constraintStart_toEndOf="@id/button7" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@id/button7" android:layout_marginStart="24dp"/> <Button android:id="@+id/button10" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/quiz_atras" app:layout_constraintStart_toStartOf="@id/button7" app:layout_constraintTop_toBottomOf="@id/button7" android:layout_marginTop="30dp"/> <Button android:id="@+id/button8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/quiz_siguiente" app:layout_constraintEnd_toEndOf="@id/button6" app:layout_constraintTop_toTopOf="@id/button10"/> </androidx.constraintlayout.widget.ConstraintLayout>
该方案直接将下方两个按钮的左右边界分别和上方两个按钮的左右边界做约束,不仅能保证中间间距完全一致,还能保证按钮左右边缘也对齐,更符合期望效果。
内容的提问来源于stack exchange,提问作者Jamani
相关产品推荐
相关产品推荐

