当前位置: 首页 > 知识库问答 >
问题:

Android-如何在切换方向时保持RecyclerView项的列宽不变?

师承弼
2023-03-14

我正在尝试一个非常简单的应用程序,它使用一个带有GridLayoutManager的RecyclerView。我想要实现的是保持卡片项目的列宽,并更改它们之间的边距(我需要保持列宽固定)。但当我在纵向和横向之间切换时,列本身的宽度会发生变化。

如果我理解正确,我需要测量屏幕的宽度除以每张卡的宽度,并将GridLayoutManager的跨度计数设置为计算值。但是我似乎错过了什么。

此外,我尝试使用AutoFitRecyclView(http://blog.sqisland.com/2014/12/recyclerview-autofit-grid.html),有很多帖子RecyclView GridLayoutManager:如何自动检测跨度计数?,更改RecyclView网格布局中的列数,帮助自动检测跨度计数,但这不是我想要实现的。我希望在调整列之间的边距时具有相同的列宽。

任何建议或解决方案都将不胜感激。

以下是网格项的布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="210dp"
    android:layout_height="338dp"
    android:layout_margin="12dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:id="@+id/thumbnail"
            android:layout_width="match_parent"
            android:layout_height="270dp"
            android:background="#1F000000"/>

        <TextView
            android:id="@+id/title_text"
            android:layout_width="164dp"
            android:layout_height="wrap_content"
            android:layout_below="@id/thumbnail"
            android:layout_marginBottom="13dp"
            android:layout_marginLeft="13dp"
            android:layout_marginRight="32dp"
            android:layout_marginTop="13dp"
            android:ellipsize="end"
            android:maxLines="2"
            android:textColor="#393c3d"
            android:textSize="14sp" />
    </RelativeLayout>

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

共有1个答案

江琦
2023-03-14

也许您可以重写CardView的onMeasure方法,并将MeasuredDimension设置为210dp和338dp,这样当Recyclerview计算您的CardView的宽度和高度时,它将返回绝对宽度和高度。

 类似资料:
  • 我使用布局管理器将此配置为: 我的具体情况是子项没有预定义的宽度。相反,我将它们的宽度设置为 然后我希望为每个项目提供1/3的可用空间。 到目前为止很好,但我希望,如果在最后一行只有1或2个项目显示,我想居中他们。 正如您在最后一行中看到的,这些项被拉到布局的边缘,父项的宽度在它们之间被分割。这是因为正如我所说的,它们的宽度不是预先确定的。 我所期望的是计算项目的宽度,因为它们显示为每行3个项目,

  • 所以,我有一个按钮,在黑暗和光明模式之间切换(我的网站默认是黑暗的),它可以工作,但现在我需要它保持在任何切换状态,在多个页面选择。我怀疑这和会话存储有关。也不想使用jQuery。我可以在代码中添加什么来实现这一点呢? 我有五个页面都链接到了id为“dark”的styles.css,然后在JS中我引用了第二个样式表light.css或JS中的“light”,所以我要切换样式表。所有五个页面的页脚都

  • 问题内容: 我想下载一个图像(大小不明,但始终大致为正方形)并显示它,以便它在任何屏幕尺寸上都水平填充屏幕,并垂直拉伸以保持图像的纵横比。这是我的(无效)代码。它水平拉伸图像,但不垂直拉伸图像,因此将其压扁… 问题答案: 我使用自定义视图完成了此操作。设置layout_width =“ fill_parent”和layout_height =“ wrap_content”,并将其指向适当的可绘制对

  • 我试图使用不同的图片作为网站文章页面的背景。文章的每个部分都有不同的背景图像。背景应正常滚动(背景附件为“滚动”,大小为“包含”),直到相应部分达到顶部,然后用封面大小固定。 我的问题是,背景图像只有在固定时看起来很好。大多数图像是在背景中的帧。然而,在“滚动和包含模式”中,图像不会覆盖整个背景,而是其正常高度。我收集这是因为我使用"包含"作为背景大小,然而,改变大小为"覆盖"或百分比仍然不使图像

  • 我已经设置了一个回收器视图,每行都有文本视图和隐藏按钮。 如果用户单击该项,就会显示按钮。 如果用户单击其他项,则按钮将被隐藏。 再循环视图将位置发送到每个接口的活动,该活动更改其属性。 只要不滚动recyclerview,一切都能完美运行。 Layoutmanager.getchildat(职位) 现在,当项目超出视图时,用户滚动recyclerview,位置就会出错。每向下滚动一个用户单击的项

  • 问题内容: 有人可以帮我了解如何配置hibernate以执行我想要的事情。 我有一个父实体“公寓”,其中有一个“房间”列表作为子实体。我有一个用于编辑“公寓”的表格,在该表格中,我列出所有子级“房间”只是为了提供信息。房间以单独的形式添加和编辑。 因此,因为我在公寓表格中列出了房间,所以我将lazyloading设置为false: 但是,如果我编辑一个公寓并将其存储,则所有公寓房间都会突然消失。在