2017-04-12 592 views
4

我是Android Studio的begginer,我试图垂直居中ConstraintLayout的内容,但没有成功。我尝试过使用android:gravity="center",并删除了所有元素的app:layout_editor_absoluteY,但不会发生......所以,我该如何集中这个?如何将Android Studio中的ConstraintLayout内容垂直居中?

<?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> 
+1

只是为了明确要居中约束布局或限制布局本身里面的元素呢? – Juanca

+0

@Juanca我想集中里面的元素,他们目前在顶部:/ – Igor

回答

8

ConstraintLayout是可以使安排非常灵活,但是从你的描述,我认为一个“盒装链”将满足您的要求的。

“链”意味着一行中的所有视图在两个方向上彼此约束,因此顶视图会约束到下一个视图,并且下一个视图约束回到顶视图等等链。然后您可以选择链条的行为方式。所以,在你的例子(为简单起见去除多余的东西):

<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> 

在链,顶视图(或左侧卧式链)是“头”,你可以改变链的行为,在此case chainStylepacked这意味着所有的视图挤在一起。默认情况下,它们将被打包在屏幕的中心,但是你可以通过改变“head”视图中的属性来改变它,例如app:layout_constraintVertical_bias="0.9"会把它们放到屏幕的90%。

More about chains (including diagrams) in the ConstraintLayout guidance here.