ConstraintLayout中layout_above的替代方法是什么?

时间:2017-10-01 13:27:16

标签: android android-layout android-constraintlayout

我已尝试app:layout_constraintBottom_toTopOf="@id/the_view_which_will_remain_below",但这不是所需的输出。 我想从RelativeLayout的layout_above获得相同的行为。

使用此代码,我的Textview开始从底部出现,随着字符增加文本进入上面。但我希望文本从父母的开始开始。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context="com.fatimamostafa.restfulwebservices.asynctask.AsyncTaskRequest">
    <LinearLayout
        android:id="@+id/ll"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="2"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent">

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Run" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Clear" />

    </LinearLayout>
    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintBottom_toTopOf="@id/ll"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="160sp"
        android:text="Text"
      />


</android.support.constraint.ConstraintLayout>

2 个答案:

答案 0 :(得分:1)

将文本放在父级的顶部,将LinearLayout放在底部,将文本视图的顶部绑定到parent,并从LinearLayout取消约束它:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Text"
    android:textSize="160sp"

    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"

    app:layout_constraintTop_toTopOf="parent"

     />

<LinearLayout
    android:id="@+id/ll"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="2"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"
   >

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Run" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Clear" />

</LinearLayout>

我删除了一些我认为多余的约束。

另请注意,您可以使用&#34; @ + id&#34;将TextView放在LinearLayout上。而不是@id。

如果要约束在父顶部和线性布局之间浮动的文本,请将这些约束添加到TextView,并调整0到1之间的垂直偏差。

app:layout_constraintBottom_toTopOf="@+id/ll"
app:layout_constraintVertical_bias="0.2"

答案 1 :(得分:0)

您可以使用高度 0dp 垂直组织视图。

相对 布局中,我们可以像下面那样使用上下布局

<FrameLayout
        android:id="@+id/frame_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/bottom_nav"
        android:layout_below="@+id/toolbar"
        />

约束 布局中,必须指定高度,因此您可以指定0高度。然后您可以将视图设置为像这样的其他视图下方

<android.support.v4.view.ViewPager
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/tablayout" />

您可以使用 constraintTop_toBottomOf constraintBottom_toTopOf 属性将视图调整为其他视图的上方或下方。 谢谢