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

Трудность понимания layout_alignWithParentIfMissing

Я не понимаю значение layout_alignWithParentIfMissing для атрибута TextView.

Я прочитал следующую документацию:

android:layout_alignWithParentIfMissing

Если установлено значение true, родитель будет использоваться в качестве привязки, если якорь не может быть найден для layout_toLeftOf, layout_toRightOf и т.д.

Должно быть логическое значение, либо true, либо false.

Пожалуйста, объясните мне.

4b9b3361

Ответ 1

Это применимо только при использовании RelativeLayout.

Если вы установите элемент для toLeftOf для другого элемента, это означает, что он будет слева от этого элемента.

Но если этот элемент будет отсутствовать, потому что вы его удалите, например, он будет выровнен с родительским.

Возьмем этот пример

<?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:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="102dp"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignWithParentIfMissing="true"
        android:layout_alignBottom="@+id/textView1"
        android:layout_toRightOf="@+id/textView1"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

Посмотрите, что произойдет, если вы удалите textView1, но не трогайте textView2.

Он пойдет вниз, слева (не так, потому что он внутри родителя)

Android будет позиционировать элемент относительно родительского элемента, а не элемент, потому что он отсутствует.

Если это ложные параметры, относящиеся к отсутствующим элементам, будут проигнорированы.

Ответ 2

Другой пример. Я только что использовал.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="6dip" >

    <Button
       android:id="@+id/streamOverflow"
       android:layout_width="50dp"
       android:layout_height="30dp"
       android:layout_alignParentRight="true"
       android:background="@drawable/ic_action_overflow"
       android:focusable="false" />

    <TextView
       android:id="@+id/delete_time"
       style="?android:attr/textAppearanceSmall"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Disappears "
       android:layout_toLeftOf="@id/streamOverflow"
       android:layout_alignWithParentIfMissing="true"
     />
</RelativeLayout>

Если отсутствует "streamOverflow", текстовое представление "delete_time" ведет себя подобно тому, как имеет свойство android: layout_alignParentRight = "true".

Ответ 3

В Relative Layouts позиция View может быть указана относительно другого представления.

Теги layout_toLeftOf и layout_toRightOf позиционируют представление относительно объекта представления "якорь". Когда этот анкерный вид отсутствует, тег alignWithParentIfMissing выравнивает ваше представление с родительским представлением.