如何让按比例设置高度的View在水平GuideLine上居中?
让View居中于水平GuideLine的解决方案
你要实现的效果其实很直接——让View的垂直中心精准落在30%位置的水平GuideLine上,不管你的View高度是基于比例还是固定值,这个方法都适用。
针对你给出的布局代码,只需要修改ImageView的约束条件,把原来绑定GuideLine的top和bottom约束,换成垂直中心对齐的约束即可:
修改后的完整布局代码:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <ImageView android:id="@+id/imgLogo" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintDimensionRatio="H,1:1" app:layout_constraintEnd_toStartOf="@+id/guidelineV_75" app:layout_constraintStart_toEndOf="@+id/guidelineV_25" app:layout_constraintCenter_toCenterOf="@id/guideline_30" app:srcCompat="@drawable/ic_launcher_background" /> <android.support.constraint.Guideline android:id="@+id/guideline_30" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.3" /> <android.support.constraint.Guideline android:id="@+id/guidelineV_25" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.25" /> <android.support.constraint.Guideline android:id="@+id/guidelineV_75" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.75" /> </android.support.constraint.ConstraintLayout>
关键修改说明:
- 移除了ImageView原来的
app:layout_constraintTop_toTopOf="@id/guideline_30"和app:layout_constraintBottom_toBottomOf="@id/guideline_30"这两个约束 - 新增
app:layout_constraintCenter_toCenterOf="@id/guideline_30",这个属性会直接让ImageView的垂直中心与水平GuideLine对齐,完美实现你要的“居中于GuideLine”效果 - 你的ImageView宽度由左右两条垂直GuideLine固定,再加上
layout_constraintDimensionRatio="H,1:1"保证宽高比1:1,高度会自动匹配宽度,同时垂直位置完全由中心对齐控制,完全适配你的需求
如果之后需要微调View相对于GuideLine的位置,还可以结合app:layout_constraintVertical_bias属性,但对于“居中”这个核心需求,直接用中心对齐是最简洁可靠的方案。
内容的提问来源于stack exchange,提问作者Victor Aurélio
相关产品推荐
相关产品推荐

