在 ConstraintLayout 中在屏幕底部的视图上方对齐水平线

Posted

技术标签:

【中文标题】在 ConstraintLayout 中在屏幕底部的视图上方对齐水平线【英文标题】:Align a horizontal line above the view at the bottom of the screen in ConstraintLayout 【发布时间】:2022-01-08 21:31:07 【问题描述】:

我有一个ConstraintLayout,我想在屏幕底部显示一个按钮。屏幕的主要区域是RecyclerView,以防万一。 无论如何,我想在按钮上方有一个水平线视图。 我尝试了以下方法:

<?xml version="1.0" encoding="utf-8"?>
<ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_
    android:layout_
    >

    <TextView
       android:id="@+id/text"
       android:layout_
       android:layout_
       app:layout_constraintTop_toTopOf="parent"
       app:layout_constraintStart_toStartOf="parent"
       android:text="Some text here"    
     />
    

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler"
        app:layout_constraintTop_toBottomOf="@id/text"
        app:layout_constraintStart_toStartOf="parent"
        android:layout_marginTop="12dp"
        android:layout_
        android:layout_/>

    <View
        android:layout_
        android:layout_
        android:layout_marginStart="16dp"
        android:background="@color/red_color"
        app:layout_constraintBottom_toBottomOf="@id/button"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/recycler"
        app:layout_constraintVertical_bias="0.887" />

    <Button
        android:id="@+id/button"
        android:layout_alignParentBottom="true"
        android:layout_
        android:layout_
        app:layout_constraintBottom_toBottomOf="parent"
        android:text="Click Here"
        />
</ConstraintLayout>

但虚拟视图没有显示在按钮上方。 我能做些什么来解决这个问题?

【问题讨论】:

如果可能,请提供您想做什么的图片 @KaranMehta:我只想要屏幕底部按钮上方的红色水平线 我可以建议如何使用线性布局或相对布局 @KaranMehta:我需要使用 ConstraintLayout。 【参考方案1】:
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_
        android:layout_
        >
    
        <TextView
            android:id="@+id/text"
            android:layout_
            android:layout_
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            android:text="Some text here"
            />
    
    
        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recycler"
            app:layout_constraintTop_toBottomOf="@id/text"
            app:layout_constraintStart_toStartOf="parent"
            android:layout_marginTop="12dp"
            app:layout_constraintBottom_toTopOf="@+id/guideline"
            android:layout_
            android:layout_/>
    
        <View
            android:layout_
            android:layout_
            android:background="@color/black"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/recycler" />
    
    
        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline"
            android:layout_
            android:layout_
            android:orientation="horizontal"
            app:layout_constraintGuide_percent="0.9" />
        <Button
            android:id="@+id/button"
            android:layout_alignParentBottom="true"
            android:layout_
            android:layout_
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/guideline"
            android:text="Click Here"
            />
    </androidx.constraintlayout.widget.ConstraintLayout>

这是可能对您有所帮助的可行解决方案。

【讨论】:

这似乎行得通。 1)你是如何选择0.9的? 2)我在行视图中使用了app:layout_constraintBottom_toTopOf="@id/guideline"。你觉得这有什么问题吗? 1)0.9是屏幕比例。 不是说把它放在离顶部90%的位置吗?不知道如何理解数字 2)没有问题。 @Jim 0 到 100 是指南中的屏幕比例。在你的情况下,这个屏幕比例应该是垂直的。【参考方案2】:

看看这个

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_>

    <TextView
        android:id="@+id/text"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_
        android:layout_
        android:text="Some text here" />


    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler"
        android:layout_
        android:layout_
        android:layout_above="@id/red_view"
        android:layout_below="@id/text"
        android:layout_marginTop="12dp" />

    <View
        android:id="@+id/red_view"
        android:layout_
        android:layout_
        android:layout_above="@id/button"
        android:layout_marginBottom="5dp"
        android:background="#ff0000" />

    <Button
        android:id="@+id/button"
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true"
        android:text="Click Here" />

</RelativeLayout>

【讨论】:

问题是关于使用 ConstraintLayout

以上是关于在 ConstraintLayout 中在屏幕底部的视图上方对齐水平线的主要内容,如果未能解决你的问题,请参考以下文章

用户滚动到 ScrollView Android 底部后启用按钮

按钮在约束布局中没有完全粘在屏幕底部

ConstraintLayout中的Android RecyclerView不滚动

ConstraintLayout 内的 NestedScrollView 不可滚动

ConstraintLayout简明实用指南

ConstraintLayout简明实用指南