android:gravity=top не выравнивает дочерний вид сверху, но центр выравнивается по центру?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="top"   <!--this line-->
    android:orientation="horizontal" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0"
        android:textSize="56dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0"
        android:textSize="36dp" />
</LinearLayout>

Разве это не должно привести к тому, что меньший t-вид "0" выровняется по верхней части внутреннего LinearLayout? Поскольку другой «0» больше по высоте, он увеличивает общую высоту внутреннего LinearLayout.

В качестве альтернативы, если вы включили это:

android:layout_gravity="top"

в t-виде меньшего 0 он также ничего не делает. Почему это? Оборачивает ли wrap_content LinearLayout каждое отдельное представление независимо от других? Если да, то почему установка гравитации на «центр» работает? В том смысле, что меньший ноль вертикально центрирован относительно своего родителя.

Я знаю, что вы можете просто установить меньшую высоту 0, чтобы она соответствовала родителю, и установить его собственную гравитацию сверху. Я просто пытаюсь понять это. Спасибо.


person House3272    schedule 03.06.2013    source источник


Ответы (3)


Атрибут gravity применяется к виджетам в пределах LinearLayout, тогда как layout_gravity указывает родителю LinearLayout, где разместить дочерний элемент (LinearLayout).

Кроме того, в вертикали LinearLayout атрибут gravity="top" не будет работать.

В макете, который у вас есть сейчас, оба текстовых представления будут наложены друг на друга, обернуты линейным макетом без пробела между ними, поэтому значения «верх» или «центр» ничего не сделают, потому что есть нет дополнительного места для перемещения текстовых представлений вверх или вниз.

Если вы хотите лучше понять это, попробуйте задать для линейного макета и обоих текстовых представлений фон разных цветов, например:

android:background="@color/mycolor"

Затем вы увидите границы каждого виджета.

person Daniel Gabriel    schedule 04.06.2013
comment
android:orientation="horizontal" расположит TextView рядом друг с другом. - person Voicu; 04.06.2013

Поведение макета по умолчанию — выравнивание базовых линий текста, которые на английском языке находятся внизу представления. Добавление android:baselineAligned="false" к вашему LinearLayout выровняет второй TextView в верхней части представления.

person Alex Wang    schedule 22.02.2018

Вы можете использовать android:layout_weight="10" и распространять на другие компоненты.

person Íkaro Alef    schedule 17.11.2017