在Android中垂直居中视图
我正在尝试使用以下布局将View
垂直居中在屏幕上:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <EditText android:text="example text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> </LinearLayout>
但是它不起作用。 EditText
仍然在屏幕的顶部。 有人能解释我在这里做错了吗?
注意:如果我将center_horizontal
添加到layout_gravity
属性,那么它会将其水平居中,但仍不会垂直居中。
更新:使用android:gravity="center_vertical"
上的父母工作。 我仍然不明白为什么android:layout_gravity="center_vertical"
的孩子没有工作。
我跟踪Google群组的答案, 在这里它是 ©Romain Guy:
那么,首先RelativeLayout忽略layout_gravity。 那么你需要知道重力的意思是“把重力应用到这个视图的内容”,而layout_gravity意思是“在它的父母面前对这个视图施加重力”。 因此,在TextView中,重力会将文本alignment到TextView边界内,而layout_gravity会将TextView与其父边界alignment。
简单而快速的答案是将android:gravity="center_vertical"
到父视图(包含)。 对于那些想知道为什么,请参阅@Bostone的答案。
有三种方法可以垂直居中视图。 我build议现在使用ConstraintLayout。
1.水平LinearLayout
关键是方向=“水平”。 您不能水平居中方向=“垂直”。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="example text"/> </LinearLayout>
2. RelativeLayout
有了RelativeLayout,你可以使用layout_centerVertical="true"
。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="example text"/> </RelativeLayout>
3. ConstraintLayout
向你展示这个最简单。
这是XML。 它仍然需要添加一个水平约束。
<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="com.example.constraintlayout.MainActivity" tools:layout_editor_absoluteX="0dp" tools:layout_editor_absoluteY="81dp"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:layout_marginTop="8dp" android:text="example text" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent" tools:layout_editor_absoluteX="16dp"/> </android.support.constraint.ConstraintLayout>