ConstraintLayout中title的marginEnd无效,能否通过该View实现预期边距?
解决ConstraintLayout中TextView设置marginEnd不生效的问题
你遇到的是ConstraintLayout双向约束下的正常行为:当title的End约束到sub_title的Start,同时sub_title的Start又约束回title的End时,title的marginEnd不会生效,系统会优先采用sub_title的marginStart控制两者间距。
不过完全可以通过设置title来实现预期边距,以下是两种可行方案:
方案1:调整title的宽度属性
将title的layout_width设为0dp(即match_constraint),同时添加app:layout_constraintWidth_default="wrap",让控件宽度自适应文本内容的同时,正确识别marginEnd:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> <TextView android:id="@+id/title" android:layout_width="0dp" android:layout_height="wrap_content" android:text="Title" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toStartOf="@+id/sub_title" app:layout_constraintWidth_default="wrap" android:layout_marginEnd="22dp" /> <TextView android:id="@+id/sub_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="subTitle" app:layout_constraintStart_toEndOf="@+id/title" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
方案2:移除sub_title的反向约束
删掉sub_title的app:layout_constraintStart_toEndOf="@+id/title",同时给sub_title补充其他水平约束(比如绑定到父布局右侧),这样title的marginEnd就能直接控制两者间距:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Title" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toStartOf="@+id/sub_title" android:layout_marginEnd="22dp" /> <TextView android:id="@+id/sub_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="subTitle" app:layout_constraintTop_toTopOf="parent" app:layout_constraintEnd_toEndOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
注:方案2中如果不给
sub_title添加其他水平约束,它会默认显示在父布局左上角,需要根据实际布局需求调整约束。
内容的提问来源于stack exchange,提问作者Mickey Tin
相关产品推荐
相关产品推荐

