在此布局中,我尝试使复选框(id:复选框)相对于第一个包含的布局(id:1)垂直居中。截至目前,我已经添加了一个简单的边距来临时解决此问题。我无法使用用户约束布局,因为该复选框不是我希望相对于其居中的布局的同级对象。
如何使复选框相对于布局垂直居中?
<?xml version="1.0" encoding="utf-8"?>
<layout 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">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="20dp"/> <!--Hax, should be centered to 1-->
<LinearLayout
android:id="@+id/layout_2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/checkbox"
app:layout_constraintTop_toTopOf="parent">
<include
android:id="@+id/1"
layout="@layout/1" />
<include
android:id="@+id/2"
layout="@layout/2" />
<include
android:id="@+id/3"
layout="@layout/3" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
答案 0 :(得分:1)
如果从视图层次结构中删除layout_2
LinearLayout,那么您将能够做您想做的事情。
从您的问题尚不清楚,您所包含的布局是否需要LinearLayout
父级(例如,对于layout_weight
属性),但是我敢打赌,即使这样也可以解决。
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@+id/1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="@+id/1"/>
<include
layout="@layout/1"
android:id="@+id/1"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="@+id/checkbox"
app:layout_constraintEnd_toEndOf="parent"/>
<include
layout="@layout/2"
android:id="@+id/2"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/1"
app:layout_constraintStart_toEndOf="@+id/checkbox"
app:layout_constraintEnd_toEndOf="parent"/>
<include
layout="@layout/3"
android:id="@+id/3"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/2"
app:layout_constraintStart_toEndOf="@+id/checkbox"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
此布局将1
,2
和3
视图放置在垂直的“线”中,以模拟LinearLayout。因为它们现在是CheckBox的同级视图,所以您可以将CheckBox的顶部和底部限制在1
视图的顶部和底部,使其垂直居中。
如果要使用权重,则可以将底部约束添加到1
,2
和3
视图中以形成垂直链,然后可以指定app:layout_constraintVertical_weight
属性。