Вертикальное центрирование представления в 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
, тогда он центрирует его по горизонтали, но по-прежнему не центрируется по вертикали.
UPDATE:, используя android:gravity="center_vertical"
для родителя. Я до сих пор не понимаю, почему android:layout_gravity="center_vertical"
для ребенка не работает.
Ответы
Ответ 1
Я отслеживаю ответ в группах Google, здесь он и копирует; Ромен Гай:
Ну, в первую очередь RelativeLayout игнорирует layout_gravity. Затем вам нужно знать, что гравитация означает "применить силу тяжести к содержанию этого представления", тогда как layout_gravity означает "примените гравитацию к этому представлению в своем родителе". Таким образом, в TextView гравитация выравнивает текст внутри границ TextView, тогда как layout_gravity выравнивает TextView в пределах его родителя.
Ответ 2
Простым и быстрым ответом является добавление android:gravity="center_vertical"
в родительский (содержащий) вид. Для тех, кто хочет знать, почему, пожалуйста, обратитесь к @Bostone ответ.
Ответ 3
Есть три способа вертикального просмотра точки зрения. Я рекомендую использовать 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>