it-swarm.com.ru

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

34
Jeremy Logan

Я отслеживаю ответ по гугл группам, вот он © Romain Guy:

Ну, во-первых, RelativeLayout игнорирует layout_gravity. Затем вам нужно знать, что гравитация означает «применить гравитацию к содержимому этого представления», тогда как layout_gravity означает «применить гравитацию к этому представлению в пределах его родителя». Таким образом, в TextView гравитация будет выравнивать текст в границах TextView, тогда как layout_gravity будет выравнивать TextView в границах его родителя.

25
Bostone

Простой и быстрый ответ - добавить Android:gravity="center_vertical" в родительское (содержащее) представление. Для тех, кто хочет знать почему, пожалуйста, обратитесь к ответу @Bostone.

0
didxga

Есть три способа, которыми вы можете центрировать вид по вертикали. Я рекомендую использовать ConstraintLayout сейчас.

1. Горизонтальная линейная планировка

Ключ ориентации = "горизонтальный". Вы не можете центрировать по горизонтали для ориентации = "вертикальный".

<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

Проще всего показать вам это.

 enter image description here

Вот 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>
0
Suragch