Android布局中btn_ok按钮高度小于btn_later的解决方法
我的布局里有两个Button控件btn_later和btn_ok,本该尺寸一致,但现在btn_ok的高度比btn_later小,请问怎么解决?
显示效果(左侧为btn_later,右侧为btn_ok):
布局代码(rate_dialog_main.xml)
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="20dp"> <ImageView android:id="@+id/image_view" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@mipmap/ic_launcher" /> <TextView android:id="@+id/text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="@string/grateful_for_your_rating" android:textSize="18sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/image_view" /> <TextView android:id="@+id/text_view_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="😊" android:textSize="22sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/text_view" /> <RatingBar android:id="@+id/rating_bar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5" android:stepSize="1" android:layout_marginVertical="10dp" android:theme="@style/rating_bar" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/text_view_2" /> <LinearLayout android:id="@+id/ll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:orientation="horizontal" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/rating_bar"> <Button android:id="@+id/btn_later" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="10dp" android:background="@color/c_2196f3" android:textColor="@color/c_4acfac" android:text="@string/later" /> <Button android:id="@+id/btn_ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="5dp" android:alpha="0.5" android:text="@string/rate" android:textColor="@android:color/white" android:enabled="false" /> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
解决方法
问题根源是两个Button的样式不统一:btn_later自定义了背景,btn_ok用系统默认样式且处于禁用状态,导致高度差异。以下是几种修复方式:
方法1:统一背景样式
给btn_ok设置和btn_later相同的背景,若要区分禁用状态,可以用selector定义不同状态的背景颜色:
<Button android:id="@+id/btn_ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="5dp" android:alpha="0.5" android:text="@string/rate" android:textColor="@android:color/white" android:enabled="false" android:background="@color/c_2196f3" />
方法2:让LinearLayout强制子View高度一致
给LinearLayout添加weightSum,给两个Button设置layout_weight,同时让btn_ok高度匹配父容器:
<LinearLayout android:id="@+id/ll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:orientation="horizontal" android:weightSum="2" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/rating_bar"> <Button android:id="@+id/btn_later" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginLeft="5dp" android:layout_marginRight="10dp" android:background="@color/c_2196f3" android:textColor="@color/c_4acfac" android:text="@string/later" /> <Button android:id="@+id/btn_ok" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:layout_marginLeft="10dp" android:layout_marginRight="5dp" android:alpha="0.5" android:text="@string/rate" android:textColor="@android:color/white" android:enabled="false" /> </LinearLayout>
方法3:用ConstraintLayout直接约束按钮
移除LinearLayout,直接用ConstraintLayout让两个Button高度对齐:
<Button android:id="@+id/btn_later" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="10dp" android:background="@color/c_2196f3" android:textColor="@color/c_4acfac" android:text="@string/later" app:layout_constraintEnd_toStartOf="@+id/btn_ok" app:layout_constraintTop_toBottomOf="@+id/rating_bar" app:layout_constraintBottom_toBottomOf="@+id/btn_ok" app:layout_constraintHorizontal_bias="0.5" /> <Button android:id="@+id/btn_ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:alpha="0.5" android:text="@string/rate" android:textColor="@android:color/white" android:enabled="false" app:layout_constraintStart_toEndOf="@+id/btn_later" app:layout_constraintTop_toBottomOf="@+id/rating_bar" app:layout_constraintBottom_toBottomOf="@+id/btn_later" app:layout_constraintHorizontal_bias="0.5" />
内容的提问来源于stack exchange,提问作者user21597761
相关产品推荐
相关产品推荐

