【问题标题】:How to make RecyclerView inside CardView and CardView have it's size when it has low items如何使 CardView 和 CardView 中的 RecyclerView 在项目较少时具有它的大小
【发布时间】:2018-09-02 09:44:56
【问题描述】:

我在CardView 中有一个RecyclerView,但我有一个问题,我在RecyclerView 的底部有2 个按钮,所以我把它们放在RelativeLayout 的末尾并给它们parent_bottom 真的所以我可以使它们可见,但这会使CardView 具有全屏,无论RecyclerView 是否有项目。

XML 代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="12dp"
    app:cardElevation="8dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:padding="8dp">

        <TextView
            android:id="@+id/activeInspections"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text=" Your active inspections"
            android:textSize="18sp" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/rvActiveInspections"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_above="@id/btnClear"
            android:layout_below="@+id/activeInspections"
            android:layout_marginTop="8dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp"
            android:layout_alignParentBottom="true"
            android:layout_marginTop="8dp"
            android:id="@+id/btnClear"
            android:background="?selectableItemBackground"
            android:text="CLear" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginBottom="8dp"
            android:layout_marginTop="8dp"
            android:id="@+id/btnContinue"
            android:layout_alignParentBottom="true"
            android:background="?selectableItemBackground"
            android:text="Continue"
            android:textColor="@color/blue_normal" />

    </RelativeLayout>
</android.support.v7.widget.CardView>

当我尝试另一件事时,下面的代码使它们低于RecyclerView,因此它固定以防万一,另一种情况如图所示(底部的按钮未显示)

那么如何解决这个问题?

<RelativeLayout 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:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="12dp"
    app:cardElevation="8dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:padding="8dp">

        <TextView
            android:id="@+id/activeInspections"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text=" Your active inspections"
            android:textSize="18sp" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/rvActiveInspections"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/activeInspections"
            android:layout_marginTop="8dp" />

        <Button
            android:id="@+id/btnClear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:layout_below="@+id/rvActiveInspections"
            android:layout_marginBottom="8dp"
            android:layout_marginTop="8dp"
            android:background="?selectableItemBackground"
            android:text="CLear" />

        <Button
            android:id="@+id/btnContinue"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/rvActiveInspections"
            android:layout_marginBottom="8dp"
            android:layout_marginTop="8dp"

            android:background="?selectableItemBackground"
            android:text="Continue"
            android:textColor="@color/blue_normal" />

    </RelativeLayout>
</android.support.v7.widget.CardView>

目标是这个,当项目扩展时,它只适合屏幕并且不会超出它

【问题讨论】:

    标签: android android-recyclerview android-cardview


    【解决方案1】:

    首先,您可以通过将CardView 中的relativelayout 更改为LinearLayout 并为按钮创建嵌套的相对布局来解决。为了避免嵌套布局,试试我下面的代码会帮助你..

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="12dp"
        app:cardElevation="8dp">
    
            <TextView
                android:id="@+id/activeInspections"
                android:layout_width="match_parent"
                android:layout_height="25dp"
                android:text=" Your active inspections"
                android:textSize="18sp" />
    
            <android.support.v7.widget.RecyclerView
                android:id="@+id/rvActiveInspections"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="60dp"
                android:layout_marginTop="25dp" />
    
    
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="8dp"
                android:layout_marginTop="8dp"
                android:id="@+id/btnClear"
                android:layout_gravity="bottom"
                android:background="?selectableItemBackground"
                android:text="CLear" />
    
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="8dp"
                android:layout_marginTop="8dp"
                android:id="@+id/btnContinue"
                android:layout_gravity="bottom|end"
                android:background="?selectableItemBackground"
                android:text="Continue"
                android:textColor="@color/bb_darkBackgroundColor" />
    
    
    </android.support.v7.widget.CardView>
    
    </LinearLayout>
    

    根据您的需要调整 recylerview 顶部和底部边距。

    【讨论】:

      【解决方案2】:

      只需让 Recyclerview 的权重 = 1,这意味着父级应该是 LinearLayout 请检查下面的代码

      <android.support.v7.widget.CardView
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_margin="12dp"
          app:cardElevation="8dp">
      
          <android.support.v7.widget.LinearLayoutCompat
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="vertical"            >
      
              <TextView
                  android:id="@+id/activeInspections"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:layout_marginEnd="8dp"
                  android:layout_marginRight="8dp"
                  android:text=" Your active inspections"
                  android:textSize="18sp"
                  />
      
              <android.support.v7.widget.RecyclerView
                  android:id="@+id/rvActiveInspections"
                  android:layout_weight="1"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:layout_marginEnd="8dp"
                  android:layout_marginRight="8dp"
                  android:layout_marginTop="8dp"
                   />
      
              <android.support.v7.widget.LinearLayoutCompat
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content">
      
              <Button
                  android:id="@+id/btnClear"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_marginBottom="16dp"
                  android:layout_marginLeft="8dp"
                  android:layout_marginStart="8dp"
                  android:background="?selectableItemBackground"
                  android:text="CLear" />
      
              <Button
                  android:id="@+id/btnContinue"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_marginBottom="8dp"
                  android:layout_marginRight="8dp"
                  android:background="?selectableItemBackground"
                  android:text="Continue"
                  android:textColor="@color/blue_normal" />
              </android.support.v7.widget.LinearLayoutCompat>
          </android.support.v7.widget.LinearLayoutCompat>
      </android.support.v7.widget.CardView>
      

      【讨论】:

        【解决方案3】:

        尝试将CardView 中的RelativeLayout 更改为垂直方向的LinearLayout

        【讨论】:

          【解决方案4】:

          请使用以下代码。它运行良好。

          <RelativeLayout 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:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:layout_margin="12dp"
              app:cardElevation="8dp">
          
              <RelativeLayout
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:background="@android:color/white"
                  android:padding="8dp">
          
                  <TextView
                      android:id="@+id/activeInspections"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:text=" Your active inspections"
                      android:textSize="18sp" />
          
                  <LinearLayout
                      android:id="@+id/bottomLayout"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:layout_alignParentBottom="true"
                      android:gravity="center_horizontal"
                      android:orientation="horizontal">
          
                      <Button
                          android:id="@+id/btnClear"
                          android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
          
                          android:layout_below="@+id/rvActiveInspections"
                          android:layout_marginBottom="8dp"
                          android:layout_marginTop="8dp"
                          android:background="?selectableItemBackground"
                          android:text="CLear" />
          
                      <Button
                          android:id="@+id/btnContinue"
                          android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
                          android:layout_alignParentRight="true"
                          android:layout_below="@+id/rvActiveInspections"
                          android:layout_marginBottom="8dp"
                          android:layout_marginTop="8dp"
                          android:textColor="@color/blue_normal"
                          android:background="?selectableItemBackground"
                          android:text="Continue" />
                  </LinearLayout>
          
                  <android.support.v7.widget.RecyclerView
                      android:id="@+id/rvActiveInspections"
                      android:layout_width="match_parent"
                      android:layout_height="match_parent"
                      android:layout_above="@+id/bottomLayout"
                      android:layout_below="@+id/activeInspections"
                      android:layout_marginTop="8dp" />
          
              </RelativeLayout>
          </android.support.v7.widget.CardView>
          

          【讨论】:

          • 它在它有很多项目但没有这么多时它仍然在底部时工作
          • 你想显示按钮显示在回收视图的底部。就像当显示 1 项时显示一项的底部?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-02
          • 2021-01-06
          相关资源
          最近更新 更多