Какой приоритет у гравитации и layout_gravity в андроиде?
Я тестирую LinearLayout
и создать LinearLayout
с 2 TextView
s. 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>
Надеюсь, это было ясно.