【问题标题】:How can 'keyline' LayoutParams of CoordinatorLayout be used?CoordinatorLayout 的 'keyline' LayoutParams 如何使用?
【发布时间】:2018-04-22 11:00:50
【问题描述】:

根据文档:

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

谁能用一个例子解释一下“keyline”是如何工作的?

【问题讨论】:

标签: android android-coordinatorlayout android-layoutparams


【解决方案1】:

有两个部分:

  1. CoordinatorLayout 设置关键线,以及
  2. 在子视图中引用关键线。

对于前者,创建一个 int 数组资源并从CoordinatorLayoutkeylines 属性中引用它。例如:

res/values/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>

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 让您可以在CoordinatorLayout 中水平定位子视图。垂直定位由垂直边距和内边距确定,并且相对于CoordinatorLayout 的顶部。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    相关资源
    最近更新 更多