如何在Android Studio中垂直居中ConstraintLayout内容?

Igo*_*gor 11 android android-layout android-activity

我正在尝试Android Studio,我试图将垂直内容集中在一起ConstraintLayout,但没有成功.我试图使用android:gravity="center"并删除了app:layout_editor_absoluteY所有元素,但没有发生......所以,我怎样才能集中这个?

<?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"
    android:background="@layout/gradient"
    android:gravity="center"
    tools:context="com.test.test.MainActivity"
    tools:layout_editor_absoluteY="81dp"
    tools:layout_editor_absoluteX="0dp">

    <EditText
        android:id="@+id/txtEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:ems="10"
        android:hint="@string/lblEmail"
        android:inputType="textEmailAddress"
        android:textColorHint="@color/colorGray"
        android:background="@color/colorWhite"
        android:padding="15dp" />

    <EditText
        android:id="@+id/txtSenha"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:hint="@string/lblSenha"
        android:inputType="textPassword"
        android:textColorHint="@color/colorGray"
        android:background="@color/colorWhite"
        android:padding="15dp"
        app:layout_constraintTop_toBottomOf="@+id/txtEmail" />

    <Button
        android:id="@+id/btnEntrar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:text="@string/lblEntrar"
        app:layout_constraintTop_toBottomOf="@+id/txtSenha" />

</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

Lew*_*ary 21

ConstraintLayout在您可以做出的安排方面非常灵活,但根据您的描述,我认为"Packed Chain"符合您的要求.

"链"表示一行中的所有视图在两个方向上相互约束,因此顶视图约束到下一个视图,下一个视图约束回到顶视图,依此类推.然后,您可以选择链的行为方式.所以在你的例子中(为简单起见删除了额外的东西):

<android.support.constraint.ConstraintLayout
 ....
 android:layout_width="match_parent"
 android:layout_height="match_parent">

    <EditText
        android:id="@+id/txtEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        ...
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/txtSenha"
        app:layout_constraintVertical_chainStyle="packed" />

    <EditText
        android:id="@+id/txtSenha"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        ...
        app:layout_constraintTop_toBottomOf="@+id/txtEmail"
        app:layout_constraintBottom_toTopOf="@+id/btnEntrar"/>

    <Button
        android:id="@+id/btnEntrar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        ...
        app:layout_constraintTop_toBottomOf="@+id/txtSenha"
        app:layout_constraintBottom_toBottomOf="parent"/>

</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

在一个链中,俯视图(或左对于水平链)是"头",其中可以改变链的行为,在这种情况下,chainStylepacked意观所有硬塞在一起.默认情况下,它们将打包在屏幕的中央,但您可以通过更改"head"视图中的属性来更改此设置,例如app:layout_constraintVertical_bias="0.9"将它们放在屏幕的90%位置.

有关ConstraintLayout指南中的链(包括图表)的更多信息.