LinearLayout 水平方向不适用于 RecycleView 元素

Posted

技术标签:

【中文标题】LinearLayout 水平方向不适用于 RecycleView 元素【英文标题】:LinearLayout horizontal orientation doesn't work for RecycleView elements 【发布时间】:2021-02-24 11:17:36 【问题描述】:

我尝试在蚀刻线上将所有回收视图元素对齐 2,但它们仅垂直对齐线上的一个元素。

这是我的代码:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:weightSum="2"
android:orientation="horizontal">
<androidx.cardview.widget.CardView
    android:id="@+id/card_pdf"
    android:layout_
    android:layout_
    android:layout_marginStart="12dp"
    android:layout_marginTop="12dp"
    android:layout_marginEnd="12dp"
    android:layout_marginBottom="12dp"
    android:layout_weight="1">
<TextView
android:id="@+id/tv_pdf_name"
android:layout_
android:layout_
android:text="ceva"
android:textSize="25sp"
android:padding="6dp"/>
</androidx.cardview.widget.CardView>
</LinearLayout>

我得到的结果:

【问题讨论】:

【参考方案1】:

您似乎不了解 RecyclerView 的概念。一个 ViewHolder 仅包含 1 个项目(因此您创建的布局仅影响一个 ViewHolder,而不影响整个 RecyclerView,您将永远无法实现您想要的)。

相反,将这些行添加到您的 xml 中的 RecyclerView:

app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="2"

GridLayoutManager 在网格中布置项目。 spanCount 定义该网格中有多少列。

您的项目布局中也不需要LinearLayout。您应该只有CardViewTextView

【讨论】:

我按照你说的做了,首先在 XML 中更改 GridLayoutManager 不起作用。因为我有我的 rv.layoutManager 一个 LinearLayout 。但是在从 Kotlin 代码更改后它起作用了: rv.layoutManager = GridLayoutManager(this,2) 谢谢你的帮助!【参考方案2】:

如果您想在 recyclerview 中并排设置 2 列中的项目,那么您必须使用 recyclerview 网格布局管理器。例如:android-gridlayoutmanager-example

【讨论】:

以上是关于LinearLayout 水平方向不适用于 RecycleView 元素的主要内容,如果未能解决你的问题,请参考以下文章

线性布局

LinearLayout minHeight 不适用于 weight="1"

布局与控件——与你想象不一样的LinearLayout

layout_gravity 在水平线性布局中不起作用

详解Android基本基本布局

函数“setSeconds( )”不适用于 p5.js Web 编辑器