Как использовать ключевые параметры LayoutParams CoordinatorLayout?
Согласно руководству Индекс горизонтальной ключевой линии, указанной для родительского CoordinatorLayout, которому этот дочерний элемент должен быть выровнен относительно.
Кто-нибудь может объяснить работу "ключевой линии" на примере?
1 ответ
Есть две части:
- установка ключевых линий для, и
- ссылка на ключевую строку в дочернем представлении.
В первом случае создайте ресурс массива 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
.