约束布局高度占用可用空间

时间:2020-01-18 21:23:41

标签: android android-constraintlayout

我有一个约束布局,并且在线性布局内部,看起来像是约束在底部的条形图。除了我还有一个项目(称为SwipeFlingAdapterView),我想占用剩余空间,即从顶部开始,一直向下直到线性布局栏的顶部:

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".fragments.SwipeFragment">


    <LinearLayout
        android:id="@+id/likeDislikeBar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/like_dislike_height"
        android:gravity="bottom"
        android:orientation="horizontal"
        app:layout_constraintBottom_toBottomOf="parent">

        <ImageButton
            android:id="@+id/dislikeButton"
            android:layout_width="0dp"
            android:layout_height="@dimen/like_dislike_button_height"
            android:layout_weight="1"
            android:background="@null"
            android:src="@drawable/dislike"
            android:layout_gravity="center_vertical"
            android:scaleType="centerInside"/>

        <ImageButton
            android:id="@+id/likeButton"
            android:layout_width="0dp"
            android:layout_height="@dimen/like_dislike_button_height"
            android:layout_weight="1"
            android:background="@null"
            android:src="@drawable/like"
            android:layout_gravity="center_vertical"
            android:scaleType="centerInside"/>

    </LinearLayout>

    <com.lorentzos.flingswipe.SwipeFlingAdapterView
        android:id="@+id/frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintBottom_toTopOf="@id/likeDislikeBar"
        app:rotation_degrees="15.5"/>

</androidx.constraintlayout.widget.ConstraintLayout>

视图已正确约束,因此从理论上讲,如果我从SwipeFlingAdapterView中删除height =“ match_parent”,它将占用可用空间。将其高度设置为“ match_parent”会导致其覆盖likeDislikeBar。

有没有简单的方法可以做到这一点?我可以使用约束布局吗?

2 个答案:

答案 0 :(得分:1)

您需要删除

app:layout_constraintEnd_toEndOf="parent"

ConstraintLayout对于这样一个简单的布局也似乎是过大的选择。

RelativeLayout在这里已经足够了。在这种情况下,您可以将likeDislikeBar设置为layout_alignParentBottomSwipeFlingAdapterView来设置layout_alignParentTopandroid:layout_above="@id/likeDislikeBar"

答案 1 :(得分:1)

不建议将numbers.Number用于ConstraintLayout的任何子项,如官方docstutorial中所述。这适用于垂直和水平尺寸。

为了使match_parent使用约束之间的所有可用高度,您需要将其SwipeFlingAdapterView设置为android:layout_height(以匹配约束)。