【问题标题】:How do margins in chains work in ConstraintLayout 1.1.0 (beta)链中的边距如何在 ConstraintLayout 1.1.0(测试版)中工作
【发布时间】:2017-12-21 19:18:02
【问题描述】:

自从切换到 ConstraintLayout 版本 1.1.0-beta4 后,我的一些布局出现了问题。在进行任何更改之前,我想更好地了解ConstraintLayout 链中的边距是如何工作的。在下文中,我比较了ConstraintLayout 1.0.2 版和 1.1.0-beta4 版中的布局,但我认为问题首先出现在 1.1.0-beta2 中。

我的目标是让一些文本视图在屏幕上延伸,第一和第二文本视图与第二和第三文本视图之间有间隙。背景应显示在这些边距中。为此,我创建了一个水平链,并指定了从左侧文本视图到中心文本视图的结束边距以及从中心文本视图到右侧文本视图的结束边距。横链样式为spread_inside

示例 1 - 使用 ConstraintLayout 1.0.2 版

这就是版本 1.0.2 中的样子,也是我所期望的。

<android.support.constraint.ConstraintLayout 
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="@android:color/holo_blue_light">

    <TextView
        android:id="@+id/tvLeft"
        android:layout_width="0dp"
        android:layout_height="35dp"
        android:layout_marginEnd="8dp"
        android:background="@android:color/white"
        android:gravity="center"
        android:text="Text1"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/tvCenter"
        app:layout_constraintHorizontal_chainStyle="spread_inside"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="HardcodedText" />

    <TextView
        android:id="@+id/tvCenter"
        android:layout_width="0dp"
        android:layout_height="35dp"
        android:layout_marginEnd="8dp"
        android:background="@android:color/white"
        android:gravity="center"
        android:text="Text2"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/tvRight"
        app:layout_constraintStart_toEndOf="@+id/tvLeft"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="HardcodedText" />

    <TextView
        android:id="@+id/tvRight"
        android:layout_width="0dp"
        android:layout_height="35dp"
        android:background="@android:color/white"
        android:gravity="center"
        android:text="Text3"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/tvCenter"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="HardcodedText" />

</android.support.constraint.ConstraintLayout>

示例 2 - 使用 ConstraintLayout 版本 1.1.0-beta4

ConstraintLayout 的 1.1.0-beta4 版本中,相同的布局如下所示。请注意,边距已消失。我希望这应该与示例 1 相同,但事实并非如此。

示例 3 - 使用带起始边距的 ConstraintLayout 版本 1.1.0-beta4

如果我采用相同的布局并简单地将8dp 的起始边距添加到右侧文本视图 (tvRight),我的边距不仅会重新出现在中间和右侧文本视图之间,而且还会出现在左侧和中间文本视图之间虽然我没有改变那里的边距。

这不仅仅是先前设置的边距突然被兑现。如果我将最右侧文本视图的起始边距设置为“48dp”,则似乎是48dp 的边距也会出现在左侧和中心文本视图之间。

<android.support.constraint.ConstraintLayout 
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="@android:color/holo_blue_light">

<!-- TextViews tvLeft & tvRight not shown but are the same as above.-->

<TextView
    android:id="@+id/tvRight"
    android:layout_width="0dp"
    android:layout_height="35dp"
    android:layout_marginStart="48dp"
    android:background="@android:color/white"
    android:gravity="center"
    android:text="Text3"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/tvCenter"
    app:layout_constraintTop_toTopOf="parent"
    tools:ignore="HardcodedText" />

</android.support.constraint.ConstraintLayout>  

所以,我的问题是,“为什么我会看到这些结果?” ConstraintLayout 链中的边距如何处理,尤其是 spread_inside 链?处理链边距的方式是否发生了变化,还是我遗漏了什么?我正在寻找解释或参考解释这一切的一些文档。

【问题讨论】:

    标签: android android-layout android-constraintlayout


    【解决方案1】:

    我找不到任何文档可以为这个确切的问题提供权威答案。不过the API documentation for ConstraintLayout里有一点关于margin的讨论:

    如果设置了侧边距,它们将应用于相应的约束(如果存在)

    在链的特定实例中,每个视图之间都有双向约束。也就是说,不仅视图 A 的结束被约束到视图 B 的开始,而且视图 B 的开始也被约束到视图 A 的结束。

    在您发布的布局中,视图 A 具有结束约束和结束边距,但视图 B 具有开始约束且没有开始边距。据我所知,这意味着您的布局中有冲突的规则(视图 A 想要距离视图 B 8dp,但视图 B 想要距离视图 A 0dp)。也许不同版本的 ConstraintLayout 库有不同的策略来 (a) 确定这是否甚至算作冲突,以及 (b) 如果是,则解决冲突。

    通过实验,这是我发现在不同 ConstraintLayout 库版本上以链形式工作的边距:

    版本 1.0.2

    链中每个视图的边距不依赖或影响链中的其他视图。这对行为有(至少)两个可见的影响。首先,向一个视图添加边距会将另一个视图推开该数量,而不管该视图的边距如何。其次,为一个视图添加边距不会影响更下游视图的边距(例如,在您的第一个视图上放置 8dp 结束边距本身不会导致在您的第二个和第三个视图之间出现 8dp 的空间)。

    版本 1.1.0-beta4

    链中每个视图的边距都依赖并影响链中的其他视图。同样,这对行为有两个明显的影响。首先,向一个视图添加边距不会将另一个视图推开,除非它也具有相同数量的边距*。其次,在链的第一个和第二个视图之间添加边距也会影响链的第二个和第三个视图之间的间距**。

    *:似乎 1.1.0-beta4 只允许一个起始边距将视图分开,而只允许一个结束边距没有效果。无论如何,我建议匹配边距。

    **:我怀疑这是因为链试图平均分配“空间”。视图 A 和 B 之间的边距会产生间隙,并且由于链想要强制保持一致的间距,它会在视图 B 和 C 之间添加类似的间隙。

    示例:

    向下剥离,这是一个与原始布局一样的布局,边距略有变化。我保持所有其他属性不变。

    <android.support.constraint.ConstraintLayout>
    
        <TextView
            android:layout_marginEnd="8dp"/>
    
        <TextView
            android:layout_marginStart="8dp"/>
    
        <TextView/>
    
    </android.support.constraint.ConstraintLayout>
    

    v1.0.2:

    v1.1.0-beta4:

    这应该说明库版本之间的两个差异。同样,我完全无法找到解释这一切的官方文档,但仅基于实验似乎是正确的。

    【讨论】:

    • 感谢您的详细回复。您很好地解释了观察到的行为,但我想知道这种行为如何合理化和记录。我又玩了一会儿,发现我可以通过将开始边距设置为 8dp 并将结束边距设置为 0dp 以链式样式 packed 来获得 1.1.0-beta4 中的 1.0.2 spread_inside 行为. (末端边距现在似乎在链中完全被忽略了,所以没关系。)这对我来说很有意义,并允许我在链中设置不同的边距,尽管 1.1.0-beta4 中的 spread_inside 行为仍然是一个谜.
    • 还有 1.1.0-beta5,它的行为更像 1.0.2
    【解决方案2】:

    根据 Ben P. 的回答,我已经确定了以下关于 ConstraintLayout 链中的边距的内容。此信息适用于 ConstraintLayout 版本 1.1.0-beta4。

    一般观察

    1. 在一个链中,所有的起始边距 (android:layout_marginStart) 都会得到尊重。这意味着视图之间的间距不会小于指定的起始边距。但是,间距可能会更大,如下所述。

    2. 结束边距 (android:layout_marginEnd) 没有相关性,似乎被忽略了。这不适用于链末端视图的末端边距,而仅适用于视图交叉链接以创建链的内部边距。

    3. 当链在其约束范围内居中时,链的中心位于链头的开始边距和链尾的结束边距之间。

    在下面的示例中,视图“A”、“D”和“G”被限制在父级开始。视图“C”、“F”和“I”被限制在父端。

    链条样式:packed

    如果链样式是“packed”,则所有视图都首尾相连,由指定的起始边距分隔。视图之间的间距可以根据起始边距的定义方式而有所不同。在下图中,视图的宽度为match_constraints,并且按照指示设置了边距。

    如果视图的宽度设置为match_constraints 以外的其他值,则视图仍以指定的边距打包,但链位于链头的起始边距和链尾的结束边距之间。

    我得出了这种解释,而不是考虑附加到结束视图的结束边距,因为 Android Studio 设计器有相同的解释:

    链条样式:spread

    在“spread”链样式中,所有视图都分布在开始和结束约束之间,这样每个视图之前和之后的空间相同并且等于定义的最大开始边距。如果每个视图的宽度为match_constraints,则默认所有视图的宽度相同。

    链条样式:spread_inside

    spread_inside 样式的链将采用链的第一个视图并将其锚定到其起始约束,同时尊重其起始边距。端视图将锚定到其端约束,同时尊重其端边距。内部视图将在视图之间以相等的间距分布,例如 spread 链。


    下面是设置了不同边距的相同布局。视图“F”和“I”的起始边距设置为 8dp,但差距已扩大到 16dp。视图“G”、“H”和“I”的宽度都相同,尽管它们看起来并不相同。

    此布局的 XML 显示在本文末尾。

    感兴趣但并不重要:如果视图的宽度为 match_constraints 并且所有边距为零,则不同的链类型无法区分。

    以上信息也适用于垂直链。将android:layout_marginTop 替换为android:layout_marginStart,将android:layout_marginBottom 替换为android:layout_marginEnd

    布局

    <android.support.constraint.ConstraintLayout 
        android:id="@+id/constraintLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/holo_blue_light">
    
        <TextView
            android:id="@+id/heading1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:text="packed, match_constraints"
            android:textAppearance="@style/TextAppearance.AppCompat.Medium"
            android:textSize="16sp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:ignore="HardcodedText" />
    
        <TextView
            android:id="@+id/textA"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_marginTop="8dp"
            android:background="@android:color/white"
            android:gravity="center"
            android:text="A"
            android:textColor="@android:color/black"
            app:layout_constraintEnd_toStartOf="@+id/textB"
            app:layout_constraintHorizontal_chainStyle="packed"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/heading1"
            tools:ignore="HardcodedText" />
    
        <View
            android:layout_width="8dp"
            android:layout_height="35dp"
            android:background="#ff00cc"
            app:layout_constraintEnd_toStartOf="@id/textB"
            app:layout_constraintTop_toTopOf="@id/textB" />
    
        <TextView
            android:id="@+id/textB"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_marginStart="8dp"
            android:background="@android:color/darker_gray"
            android:gravity="center"
            android:text="B"
            android:textColor="@android:color/white"
            app:layout_constraintEnd_toStartOf="@+id/textC"
            app:layout_constraintStart_toEndOf="@+id/textA"
            app:layout_constraintTop_toTopOf="@+id/textA"
            tools:ignore="HardcodedText" />
    
        <View
            android:id="@+id/view16dpOnC"
            android:layout_width="16dp"
            android:layout_height="35dp"
            android:background="#fffb00"
            app:layout_constraintEnd_toStartOf="@id/textC"
            app:layout_constraintTop_toTopOf="@+id/textC" />
    
        <TextView
            android:id="@+id/textC"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_marginStart="16dp"
            android:background="@android:color/white"
            android:gravity="center"
            android:text="C"
            android:textColor="@android:color/black"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/textB"
            app:layout_constraintTop_toTopOf="@+id/textA"
            tools:ignore="HardcodedText" />
    
        <TextView
            android:id="@+id/heading2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:text="spread, match_constraints"
            android:textAppearance="@style/TextAppearance.AppCompat.Medium"
            android:textSize="16sp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/textA"
            tools:ignore="HardcodedText" />
    
        <View
            android:layout_width="16dp"
            android:layout_height="35dp"
            android:background="#00ff19"
            app:layout_constraintEnd_toStartOf="@id/textD"
            app:layout_constraintTop_toTopOf="@id/textD" />
    
        <TextView
            android:id="@+id/textD"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_marginTop="8dp"
            android:background="@android:color/white"
            android:gravity="center"
            android:text="D"
            android:textColor="@android:color/black"
            app:layout_constraintEnd_toStartOf="@+id/textE"
            app:layout_constraintHorizontal_chainStyle="spread"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/heading2"
            tools:ignore="HardcodedText" />
    
        <View
            android:layout_width="16dp"
            android:layout_height="35dp"
            android:background="#fffb00"
            app:layout_constraintEnd_toStartOf="@id/textE"
            app:layout_constraintTop_toTopOf="@id/textE" />
    
        <TextView
            android:id="@+id/textE"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_marginStart="16dp"
            android:background="@android:color/darker_gray"
            android:gravity="center"
            android:text="E"
            android:textColor="@android:color/white"
            app:layout_constraintEnd_toStartOf="@+id/textF"
            app:layout_constraintStart_toEndOf="@+id/textD"
            app:layout_constraintTop_toTopOf="@+id/textD"
            tools:ignore="HardcodedText" />
    
        <View
            android:layout_width="8dp"
            android:layout_height="35dp"
            android:background="#003cff"
            app:layout_constraintStart_toEndOf="@id/textE"
            app:layout_constraintTop_toTopOf="@+id/textE" />
    
        <View
            android:layout_width="8dp"
            android:layout_height="35dp"
            android:background="#ff00cc"
            app:layout_constraintEnd_toStartOf="@id/textF"
            app:layout_constraintTop_toTopOf="@id/textF" />
    
        <TextView
            android:id="@+id/textF"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_marginStart="8dp"
            android:background="@android:color/white"
            android:gravity="center"
            android:text="F"
            android:textColor="@android:color/black"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/textE"
            app:layout_constraintTop_toTopOf="@+id/textD"
            tools:ignore="HardcodedText" />
    
        <View
            android:layout_width="16dp"
            android:layout_height="35dp"
            android:background="#00ff19"
            app:layout_constraintStart_toEndOf="@id/textF"
            app:layout_constraintTop_toTopOf="@id/textF" />
    
        <TextView
            android:id="@+id/heading3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:text="spread_inside, match_constraints"
            android:textAppearance="@style/TextAppearance.AppCompat.Medium"
            android:textSize="16sp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/textD"
            tools:ignore="HardcodedText" />
    
        <View
            android:layout_width="8dp"
            android:layout_height="35dp"
            android:background="#003cff"
            app:layout_constraintEnd_toStartOf="@id/textG"
            app:layout_constraintTop_toTopOf="@+id/textG" />
    
        <TextView
            android:id="@+id/textG"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:background="@android:color/white"
            android:gravity="center"
            android:text="G"
            android:textColor="@android:color/black"
            app:layout_constraintEnd_toStartOf="@+id/textH"
            app:layout_constraintHorizontal_chainStyle="spread_inside"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/heading3"
            tools:ignore="HardcodedText" />
    
        <View
            android:layout_width="16dp"
            android:layout_height="35dp"
            android:background="#fffb00"
            app:layout_constraintEnd_toStartOf="@id/textH"
            app:layout_constraintTop_toTopOf="@id/textH" />
    
        <TextView
            android:id="@+id/textH"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_marginStart="16dp"
            android:background="@android:color/darker_gray"
            android:gravity="center"
            android:text="H"
            android:textColor="@android:color/white"
            app:layout_constraintEnd_toStartOf="@+id/textI"
            app:layout_constraintStart_toEndOf="@+id/textG"
            app:layout_constraintTop_toTopOf="@+id/textG"
            tools:ignore="HardcodedText" />
    
        <View
            android:layout_width="8dp"
            android:layout_height="35dp"
            android:background="#003cff"
            app:layout_constraintStart_toEndOf="@id/textH"
            app:layout_constraintTop_toTopOf="@id/textH" />
    
        <View
            android:layout_width="8dp"
            android:layout_height="35dp"
            android:background="#ff00cc"
            app:layout_constraintEnd_toStartOf="@id/textI"
            app:layout_constraintTop_toTopOf="@id/textI" />
    
        <TextView
            android:id="@+id/textI"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_marginStart="8dp"
            android:background="@android:color/white"
            android:gravity="center"
            android:text="I"
            android:textColor="@android:color/black"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/textH"
            app:layout_constraintTop_toTopOf="@+id/textG"
            tools:ignore="HardcodedText" />
    
        <View
            android:layout_width="8dp"
            android:layout_height="35dp"
            android:background="#ff00cc"
            android:visibility="gone"
            app:layout_constraintEnd_toStartOf="@id/textC"
            app:layout_constraintTop_toTopOf="@id/textC" />
    
        <View
            android:id="@+id/view8dp"
            android:layout_width="8dp"
            android:layout_height="35dp"
            android:layout_marginStart="24dp"
            android:background="#ff00cc"
            app:layout_constraintBottom_toTopOf="@id/view8dpGap"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textG"
            app:layout_constraintVertical_bias="0.100000024"
            app:layout_constraintVertical_chainStyle="packed" />
    
        <TextView
            android:id="@+id/text8dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:text="8dp start margin"
            app:layout_constraintBottom_toBottomOf="@+id/view8dp"
            app:layout_constraintStart_toEndOf="@id/view8dp"
            app:layout_constraintTop_toTopOf="@+id/view8dp"
            tools:ignore="HardcodedText" />
    
        <View
            android:id="@+id/view8dpGap"
            android:layout_width="8dp"
            android:layout_height="35dp"
            android:layout_marginStart="24dp"
            android:layout_marginTop="8dp"
            android:background="#003cff"
            app:layout_constraintBottom_toTopOf="@+id/view16dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/view8dp" />
    
        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:text="8dp gap not defined by start margin"
            app:layout_constraintBottom_toBottomOf="@+id/view8dpGap"
            app:layout_constraintStart_toEndOf="@+id/view8dpGap"
            app:layout_constraintTop_toTopOf="@+id/view8dpGap"
            tools:ignore="HardcodedText" />
    
        <View
            android:id="@+id/view16dp"
            android:layout_width="17dp"
            android:layout_height="35dp"
            android:layout_marginStart="24dp"
            android:layout_marginTop="8dp"
            android:background="#fffb00"
            app:layout_constraintBottom_toTopOf="@+id/view16dpGap"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/view8dpGap" />
    
        <TextView
            android:id="@+id/text16dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:text="16dp start margin"
            app:layout_constraintBottom_toBottomOf="@+id/view16dp"
            app:layout_constraintStart_toEndOf="@+id/view16dp"
            app:layout_constraintTop_toTopOf="@+id/view16dp"
            tools:ignore="HardcodedText" />
    
        <View
            android:id="@+id/view16dpGap"
            android:layout_width="17dp"
            android:layout_height="35dp"
            android:layout_marginStart="24dp"
            android:layout_marginTop="8dp"
            android:background="#00ff19"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/view16dp" />
    
        <TextView
            android:id="@+id/text16dpGap"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:text="16dp gap not defined by start margin"
            app:layout_constraintBottom_toBottomOf="@+id/view16dpGap"
            app:layout_constraintStart_toEndOf="@+id/view16dpGap"
            app:layout_constraintTop_toTopOf="@+id/view16dpGap"
            tools:ignore="HardcodedText" />
    
    </android.support.constraint.ConstraintLayout>
    

    【讨论】:

      【解决方案3】:

      在约束布局中,链式的工作方式如下所示

      1.Spread:浏览量均匀分布。例如。 应用程序:layout_constraintHorizo​​ntal_chainStyle=”spread” app:layout_constraintVertical_chainStyle="spread"

      2.Spread inside:第一个和最后一个视图被附加到链的每一端的约束上,其余的均匀分布。例如。 应用程序:layout_constraintHorizo​​ntal_chainStyle=”spread_inside” app:layout_constraintVertical_chainStyle="spread_inside"

      3.Packed:视图被打包在一起(在考虑边距之后)。然后,您可以通过更改链条的头部视图偏差来调整整个链条的偏差(左/右或上/下)。例如。 应用程序:layout_constraintHorizo​​ntal_chainStyle=”packed” app:layout_constraintVertical_chainStyle=”packed”

      4.Weighted:当链设置为展开或展开内部时,您可以通过将一个或多个视图设置为“匹配约束”(0dp)来填充剩余空间。默认情况下,空间在设置为“匹配约束”的每个视图之间均匀分布,但您可以使用 layout_constraintHorizo​​ntal_weight 和 layout_constraintVertical_weight 属性为每个视图分配重要权重。如果您熟悉线性布局中的 layout_weight,则其工作方式相同。所以权重值最高的视图获得了最多的空间;具有相同权重的视图获得相同数量的空间。

      更多信息,您可以参考下图

      【讨论】:

      • 我已经看过并阅读了这份文档。问题仍然存在:spread_inside 链中的边距如何处理。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-12
      • 1970-01-01
      • 1970-01-01
      • 2013-12-12
      相关资源
      最近更新 更多