Какой приоритет у гравитации и layout_gravity в андроиде?

Я тестирую LinearLayout и создать LinearLayout с 2 TextViews. LinearLayout имеет атрибут gravity="center_vertical"и первый TextView в пределах LinearLayout имеет атрибут layout_gravity="top",

gravity="center_vertical" из LinearLayout размещает его содержимое по центру по вертикали.

layout_gravity="top" из TextView говорит своему контейнеру поставить меня наверх.

Так что же случилось, если они вместе?

В моем эксперименте layout_gravity="top" не работает.

ниже мой код и результат:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="top"
    android:text="textview 1"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="textview 2"/>

</LinearLayout>

Мой результат

2 ответа

Скорее всего, гравитация родительского элемента выполняется первой. Вы не можете увидеть эффект layout_gravity top, потому что он следует гравитации, установленной для его родительского элемента. Не следует устанавливать гравитацию center_vertical на linearlayout, если вы не хотите, чтобы первое текстовое представление появлялось посередине.

Что Джей Брайант Касиланг несколько правильно. Это из-за серьезности родителей. Но это еще не все. Это также потому, что это LinearLayout,

https://developer.android.com/guide/topics/ui/layout/linear.html

LinearLayout Предназначен для представления "рядом" друг с другом, вертикально или горизонтально. Потому что вы устанавливаете android:gravity="center_vertical" на LinearLayout а также android:layout_gravity="top" во-первых TextViewТо, что вы надеетесь увидеть это:

Однако это будет означать, что между двумя макетами будет промежуток. Интервал, который "не учтен" (без полей, без заполнения и т. Д.).

И ЭТО НЕ допускается в LinearLayout,

все дети LinearLayout должен быть рядом друг с другом каким-то образом (линейным образом, понимаете?)

Кстати, я достиг вершины, как это:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="textview 1"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:text="textview 2"/>

</RelativeLayout>

Надеюсь, это было ясно.

Другие вопросы по тегам