如何在 RecyclerView 中填充整个屏幕
Posted
技术标签:
【中文标题】如何在 RecyclerView 中填充整个屏幕【英文标题】:How to fill the entire screen in a RecyclerView 【发布时间】:2022-01-01 09:56:05 【问题描述】:在循环视图中填充整个屏幕时遇到问题。
这是我的卡片视图的 xml 代码和我的 recyclerview 所在的视图:
卡片视图:
这是它在 Ide android 工作室中的外观:
Reclyler 视图所在的布局:
<LinearLayout
android:layout_
android:layout_
android:orientation="horizontal">
<TextView
android:id="@+id/textAmount"
android:layout_
android:layout_
android:layout_weight="1"
android:gravity="center"
android:padding="4dp"
android:text="30"
android:textSize="30sp" />
<TextView
android:id="@+id/textIdPerson"
android:layout_
android:layout_
android:layout_weight="1"
android:gravity="center"
android:padding="4dp"
android:text="30"
android:textSize="30sp" />
<TextView
android:id="@+id/textId"
android:layout_
android:layout_
android:layout_weight="1"
android:gravity="center"
android:padding="4dp"
android:text="30"
android:textSize="30sp" />
</LinearLayout>
<LinearLayout
android:layout_
android:layout_
android:orientation="vertical"
android:padding="4dp">
<androidx.cardview.widget.CardView
android:layout_
android:layout_
android:layout_margin="4dp"
app:cardCornerRadius="4dp">
<LinearLayout
android:layout_
android:layout_
android:orientation="horizontal">
<TextView
android:layout_
android:layout_
android:id="@+id/textAmount"
android:padding="8dp"
android:text="ID"
android:textSize="30sp"
android:layout_weight="1"
android:gravity="center"/>
<TextView
android:layout_
android:layout_
android:id="@+id/textIdPerson"
android:padding="8dp"
android:layout_weight="1"
android:text="UserId"
android:textSize="30sp"
android:gravity="center"/>
<TextView
android:layout_
android:layout_
android:id="@+id/textId"
android:padding="8dp"
android:textSize="30sp"
android:layout_weight="1"
android:text="Amount"
android:gravity="center"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.recyclerview.widget.RecyclerView
android:layout_gravity="center"
android:layout_
android:layout_
android:layout_weight="1"
android:id="@+id/recycler_view"
android:nestedScrollingEnabled="false"
tools:listitem="@layout/list_row_main"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_
android:layout_
android:gravity="center"
android:layout_alignParentBottom="true">
<Button
android:layout_
android:layout_
android:text="atras"
android:onClick="@viewmodel::back"
android:layout_weight="1"
android:layout_marginRight="4dp"/>
<Button
android:layout_
android:layout_
android:text="Siguiente"
android:onClick="@viewmodel::next"
android:layout_weight="1"/>
</LinearLayout>
图片: enter image description here
但是当我在设备上启动应用程序时,它看起来像这样
enter image description here
【问题讨论】:
【参考方案1】:您的 activity_main.xml(或任何托管 recyclerview 的布局)应如下所示。
<androidx.appcompat.widget.LinearLayoutCompat 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_
android:layout_
android:orientation="vertical"
>
<androidx.cardview.widget.CardView
android:layout_
android:layout_
android:layout_marginStart="5dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="5dp"
app:cardCornerRadius="5dp"
app:cardElevation="8dp">
<LinearLayout
android:layout_
android:layout_
android:layout_gravity="center"
android:gravity="center_vertical|center"
android:orientation="horizontal">
<TextView
android:id="@+id/textAmount"
android:layout_
android:layout_
android:layout_weight="1"
android:gravity="center"
android:padding="4dp"
android:text="Amount"
android:textSize="30sp" />
<TextView
android:id="@+id/textIdPerson"
android:layout_
android:layout_
android:layout_weight="1"
android:gravity="center"
android:padding="4dp"
android:text="UserID"
android:textSize="30sp" />
<TextView
android:id="@+id/textId"
android:layout_
android:layout_
android:layout_weight="1"
android:gravity="center"
android:padding="4dp"
android:text="Id"
android:textSize="30sp" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_
android:layout_
android:layout_gravity="center"
android:layout_marginBottom="8dp"
android:layout_weight="2"
android:nestedScrollingEnabled="false"
tools:listitem="@layout/list_item" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_
android:layout_
android:orientation="horizontal">
<Button
android:id="@+id/btnAtras"
android:layout_
android:layout_
android:layout_marginStart="5dp"
android:layout_marginEnd="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:text="ATRAS"
/>
<Button
android:id="@+id/btnSignature"
android:layout_
android:layout_
android:layout_marginStart="5dp"
android:layout_marginEnd="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:text="Signature" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
list_item.xml 布局应该如下所示:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.cardview.widget.CardView
android:layout_
android:layout_
app:cardCornerRadius="5dp"
app:cardElevation="8dp"
android:layout_marginStart="5dp"
android:layout_marginEnd="5dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
app:cardUseCompatPadding="false"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
>
<LinearLayout
android:layout_
android:layout_
android:orientation="horizontal"
android:layout_gravity="center"
android:gravity="center|center_vertical"
>
<TextView
android:gravity="center"
android:id="@+id/textAmount"
android:layout_
android:layout_weight="1"
android:layout_
android:padding="8dp"
android:text="Amount"
android:textSize="30sp" />
<TextView
android:gravity="center"
android:id="@+id/textIdPerson"
android:layout_
android:layout_weight="1"
android:layout_
android:padding="8dp"
android:text="UserId"
android:textSize="30sp" />
<TextView
android:gravity="center"
android:id="@+id/textId"
android:layout_
android:layout_weight="1"
android:layout_
android:padding="8dp"
android:text="Id"
android:textSize="30sp" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
【讨论】:
【参考方案2】:检查您的适配器类,您为适配器类设计的布局应该具有宽度匹配父级和三个具有相同宽度的不同文本视图来保存值。
【讨论】:
【参考方案3】:确保RecyclerView
的layout_width
也设置为match_parent
。
【讨论】:
以上是关于如何在 RecyclerView 中填充整个屏幕的主要内容,如果未能解决你的问题,请参考以下文章
无法在 ScrollView 中调整 RelativeLayout 的大小以填充整个屏幕
两个 ArrayList 一个 RecyclerView 适配器
android开发xml中如何设置背景图才能填充整个屏幕?代码如下
即使指定了“match_parent”,使用 ConstraintLayout 的 RecyclerView 项目也不会填满屏幕的整个宽度