Как использовать ключевые параметры LayoutParams CoordinatorLayout?

Согласно руководству Индекс горизонтальной ключевой линии, указанной для родительского CoordinatorLayout, которому этот дочерний элемент должен быть выровнен относительно.

Кто-нибудь может объяснить работу "ключевой линии" на примере?

1 ответ

Есть две части:

  1. установка ключевых линий для, и
  2. ссылка на ключевую строку в дочернем представлении.

В первом случае создайте ресурс массива int и укажите на него ссылку из атрибута. Например:

res / values ​​/ array.xml:

      <?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="keylines">
        <item>16</item>
        <item>72</item>
        <item>160</item>
        <item>256</item>
        <item>320</item>
    </array>
    ...
</resources>

activity_main.xml:

      <?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:keylines="@array/keylines"
    ...

Затем, чтобы расположить дочернее представление горизонтально относительно ключевой линии, установите его layout_keyline атрибут индекса в keylinesресурс массива. Например, чтобы установить кнопку на ключевой строке 2 (позиция 160dp):

activity_main.xml

          ...
    <Button
        app:layout_keyline="2"

Позиционирование относительно ключевой линии определяется layout_gravityатрибут. Для кнопки это поместит текст кнопки, поэтому, если вы хотите использовать гравитацию для размещения кнопки, оберните ее в другое представление (например, FrameLayout) и установите ключевую строку для родительского представления, а не для Button:

          <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="top|end"
        app:layout_keyline="2"
        ...>

        <Button
            ...

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

Обратите внимание, что если anchor также установлен для дочернего представления, его ключевая строка будет проигнорирована.

Если вам интересна логика макета, она реализована onLayoutChild() а также layoutChildWithKeyline() в CoordinatorLayout.

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