Подтвердить что ты не робот

Вертикальное центрирование представления в 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" для ребенка не работает.

4b9b3361

Ответ 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>