我一直在四处寻找使我的登录框保持垂直居中的位置,并且由于某种原因它无法正常工作。如果我将ConstraintLayout
的高度更改为wrap_content
,则登录表单将居中,但背景图像也会像这样被压缩:
背景图像应该保持全屏显示,但是由于主约束布局是自动换行内容,因此会缩小背景。如果将其设置为fill_parent
,会发生以下情况。我们获得了全屏图像,但是该块也不再居中。
我目前具有以下结构:
Constraint Layout
-> Linear Layout
-> Scroll View
-> login form picture, fields, and button
我使用gravity
和layout_gravity
将它们全部设置为自动换行,以居中,居中居中,等等,但我仍然无法居中该图像。有什么建议么?这是我的activity_login
布局的当前XML。
<?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"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center"
android:layout_gravity="center"
android:background="@drawable/background"
android:weightSum="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="fill_vertical|center"
android:orientation="vertical"
android:padding="46dp">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center">
<LinearLayout
android:id="@+id/email_login_form"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:contentDescription="@string/login_image"
app:srcCompat="@drawable/login_logo" />
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp">
<AutoCompleteTextView
android:id="@+id/email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/formbg"
android:ems="10"
android:hint="@string/prompt_email"
android:imeActionId="1"
android:imeOptions="actionNext"
android:inputType="textEmailAddress"
android:maxLines="1"
android:padding="16dp" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/formbg"
android:hint="@string/prompt_password"
android:imeActionId="2"
android:imeActionLabel="@string/action_sign_in_short"
android:imeOptions="actionUnspecified"
android:inputType="textPassword"
android:maxLines="1"
android:padding="16dp" />
</android.support.design.widget.TextInputLayout>
<Button
android:id="@+id/email_sign_in_button"
style="?android:textAppearanceSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:background="#9f3737"
android:text="@string/action_sign_in"
android:textColor="#ffffff"
android:textStyle="bold" />
</LinearLayout>
</ScrollView>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
答案 0 :(得分:1)
将此内容添加到ConstraintLayout的子代中,应使子代在水平和垂直方向上居中:
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
还请注意:
fill_parent
在API级别8和更高版本中已重命名为match_parent
。