4

根据文档:

指定给父 CoordinatorLayout 的水平关键线的索引,该子应相对于其对齐。

谁能用一个例子解释“关键线”是如何工作的?

4

1 回答 1

0

有两个部分:

  1. CoordinatorLayout, 和
  2. 在子视图中引用关键线。

对于前者,创建一个 int 数组资源并keylinesCoordinatorLayout. 例如:

资源/值/arrays.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>

活动主.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)并为父视图设置 keyline 而不是Button

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

        <Button
            ...

Keylines 允许您在CoordinatorLayout. 垂直定位由垂直边距和填充确定,并且相对于CoordinatorLayout.

请注意,如果anchor还为子视图设置了 an,则其 keyline 将被忽略。

如果您对布局逻辑感到好奇,它是由onLayoutChild()layoutChildWithKeyline()in实现的CoordinatorLayout

于 2021-10-20T09:23:29.920 回答