如何在不均匀高度的CardViews之间提供相等的间距?

时间:2018-05-09 06:13:36

标签: android android-linearlayout android-cardview

我的屏幕上有3张垂直排列的卡片视图。卡的数量固定为3.卡的高度不同,因为它们的内容不同。我想平均分割卡片之间的间距,以便三张卡片平均占据整个屏幕空间而不是第三张卡片和屏幕底部之间的大空白空间,如下图所示(现在是我的屏幕) )。

我尝试在卡片视图之间提供Space元素如下,但它没有做任何事情:

    <Space
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    </Space>

我也尝试将 weightSum 添加到父线性布局无效。有没有办法做到这一点?

my screen

3 个答案:

答案 0 :(得分:1)

如果要分割卡片之间的空格,可以尝试使用带有展开链的约束拉出法或在链内展开。 https://medium.com/@loutry/guide-to-constraintlayout-407cd87bc013

enter image description here

答案 1 :(得分:1)

你已经在那里了,但是不要使用Space,只需使用空视图来创建间距。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"  />

<View 
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" /> 

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"  />

<View 
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" /> 

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"  />

<View 
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" /> 

答案 2 :(得分:0)

尝试使用此代码,我使用ConstraintLayout

导入lib:

implementation 'com.android.support.constraint:constraint-layout:1.1.0'

layout.xml

<?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"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.CardView
        android:id="@+id/card1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="6dp"
        app:cardBackgroundColor="@android:color/black"
        app:layout_constraintBottom_toTopOf="@id/card2"
        app:layout_constraintTop_toTopOf="parent">

        <View
            android:layout_width="match_parent"
            android:layout_height="100dp" />
    </android.support.v7.widget.CardView>

    <android.support.v7.widget.CardView
        android:id="@+id/card2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="6dp"
        app:cardBackgroundColor="@android:color/holo_orange_dark"
        app:layout_constraintBottom_toTopOf="@id/card3"
        app:layout_constraintTop_toBottomOf="@+id/card1">

        <View
            android:layout_width="match_parent"
            android:layout_height="200dp" />
    </android.support.v7.widget.CardView>

    <android.support.v7.widget.CardView
        android:id="@+id/card3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="6dp"
        app:cardBackgroundColor="@android:color/holo_blue_bright"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/card2">

        <View
            android:layout_width="match_parent"
            android:layout_height="200dp" />
    </android.support.v7.widget.CardView>

</android.support.constraint.ConstraintLayout>

所以你修复了3 CardView

  • 其高度为wrap_content
  • 每张卡都有顶部和底部约束(第一张卡贴在父顶部,最后一张卡贴在父底部)

ConstraintLayout负责将间距拉平,以匹配我们设置的所有约束。但请确保您的内容不会太长,顶部和底部都会被剪掉。

结果:

enter image description here