RecyclerView LinearLayoutManager 设置项目计数

2024-01-05

在 GridLayoutManager 中,我可以设置跨度计数,这使得视图内的项目调整大小以能够水平适应该跨度计数。

我有一个 LinearLayoutManager,我想以同样的方式使用它,有固定数量的可见项目并调整它们的大小以适应。

我在同一视图上使用线性和网格,并根据屏幕尺寸显示项目。我似乎找不到一种方法让两种布局显示相同数量的项目。


UPDATED

我之前的答案是使用 ItemsAdapter 设置每个项目的宽度,从代码设计的角度来看这不是最好的解决方案。 正确的方法是扩展 LinearLayoutManager,因为 LayoutManager 负责布局项目视图。

Gist: https://gist.github.com/modjke/b652021679a2ed1935645a18102ab799 https://gist.github.com/modjke/b652021679a2ed1935645a18102ab799

Code:

//usage: 
//int itemsPerPage = 7;
//layoutManager = new LinearLayoutPagerManager(context, LinearLayoutManager.HORIZONTAL, false, itemsPerPage);
//recyclerView.setLayoutManager(layoutManager);
public class LinearLayoutPagerManager extends LinearLayoutManager {

private int mItemsPerPage;

public int getItemsPerPage()
{
    return mItemsPerPage;
}


public LinearLayoutPagerManager(Context context, int orientation, boolean reverseLayout, int itemsPerPage) {
    super(context, orientation, reverseLayout);

    mItemsPerPage = itemsPerPage;
}

@Override
public boolean checkLayoutParams(RecyclerView.LayoutParams lp) {
    return super.checkLayoutParams(lp) && lp.width == getItemSize();
}

@Override
public RecyclerView.LayoutParams generateDefaultLayoutParams() {
    return setProperItemSize(super.generateDefaultLayoutParams());
}

@Override
public RecyclerView.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {
    return setProperItemSize(super.generateLayoutParams(lp));
}

private RecyclerView.LayoutParams setProperItemSize(RecyclerView.LayoutParams lp) {
    int itemSize = getItemSize();
    if (getOrientation() == HORIZONTAL) {
        lp.width = itemSize;
    } else {
        lp.height = itemSize;
    }
    return lp;
}

private int getItemSize() {
    int pageSize = getOrientation() == HORIZONTAL ? getWidth() : getHeight();
    return Math.round((float) pageSize / mItemsPerPage);
}

}

之前的回答

您可以通过为每个项目提供宽度来在适配器中设置准确的项目计数。仅当您的所有项目具有相同的宽度时,此功能才有效,不要忘记设置

recyclerView.setHasFixedSize(true);

在您的 RecyclerView 上

final static int ITEMS_PER_PAGE = 7;

@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    int itemWidth = parent.getWidth() / ITEMS_PER_PAGE;

    View itemView = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.your_layout, parent, false);

    ViewGroup.LayoutParams layoutParams = itemView.getLayoutParams();
    layoutParams.width = itemWidth;
    itemView.setLayoutParams(layoutParams);
    return new ItemViewHolder(itemView);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RecyclerView LinearLayoutManager 设置项目计数 的相关文章

  • 什么是适合 Android 的 html 解析器?

    什么是适合 Android 的 html 解析器 这取决于你想做什么 如果你真的想处理 html Java 中有很多 html 解析器可以使用 这里有一些 https stackoverflow com questions 2168610
  • Android:java.lang.OutOfMemoryError:

    我在 Android 上开发了一个使用大量图像的应用程序 可绘制文件夹中有很多图像 比如说超过 100 张 我正在开发图像动画应用程序 我使用 imageview 来显示 GIF 图像 我使用了将 gif 图像分割成多个 PNG 格式图像的
  • 处理 SavedInstances 并恢复活动

    基本上我的应用程序有 2 个活动 说 A 和 B A 启动 B Activity B 播放音乐并且还有通知 情况 1 当视图仍在活动 B 上时 我按主页按钮 然后单击通知 活动 B 将打开 其视图完好无损并播放音乐 因为在清单中我使用 an
  • 禁用 com.google.android.maps.MapView 中的平移/缩放

    如何禁用 MapView 的平移 缩放功能 不是缩放控件 我想要一个完全静态的地图 我还注意到触摸地图似乎不会触发 MapView onClickListener 有人可以详细说明为什么吗 对于 Android 版 Google Maps
  • Android 软键盘 - 禁用某些键

    我正在寻找一种使用内置软键盘并禁用某些键的方法 例如 如果用户不应该使用字母 f 因为在列表中该字母不存在 则该键应显示为灰色 想象一下 用户可以在文本框中键入文本以从列表中进行选择 该列表包含 ABC BCCD 床 如果用户输入 A 然后
  • adb 今天无法连接到 VirtualBox 中的 Android-x86

    我在 VirtualBox 中成功安装了 Android x86 v3 2 eeepc 一段时间 这是帮助我在 Android 上调试 USB 主机应用程序的好方法 此类配置的安装是 安装VirtualBox 将 Android x86 v
  • 使用全局变量从内部函数获取空字符串

    请帮助我解决一些小问题 我确信你能做到 D 我试图在 firestore 文档 user cases information 上设置一个字段 其中包含一个字段 case number 首先我声明这个全局变量 private String c
  • 为什么我的地图视图上的叠加层没有显示?

    我按照 google hellomapview 教程中的说明进行操作 我得到了一个工作地图视图等 但是添加到地图中的两个项目没有显示 它们似乎在某个地方 因为点击指定位置会显示添加到项目中的消息 Edit 这是我的源代码 应该和google
  • “添加到 FragmentContainerView 的视图必须与 Fragment 关联”与 android 导航组件

    当导航组件切换到片段时 我收到 添加到 FragmentContainerView 的视图必须与片段关联 崩溃 这是什么原因造成的 我没有在任何地方看到提到这一点 并且花了一段时间才弄清楚 但在这种情况下 我试图在迁移到导航拱门组件时设置一
  • Android 上的 SQLite JDBC 驱动程序

    我正在尝试使用xerial sqlite jdbc在 Android 中管理我的数据库没有成功 我得到了java lang NoClassDefFoundError org sqlite SQLiteConnection异常 我已经导入了这
  • 绘制平滑曲线

    我想创建更平滑的曲线 而不仅仅是线角 这是我现在画的图 这是我的代码 case FREEHAND float pts float ptk ptk new float 2 imageMatrix invert inv if mCurrentS
  • Android:外部存储上的 mkdirs()/mkdir() 返回 false

    我对此感到疯狂 Log d STATE Environment getExternalStorageState File f new File Environment getExternalStoragePublicDirectory En
  • java.lang.UnsatisfiedLinkError - android studio gradle 中的 NDK?

    文件夹结构 app main java jni Android mk Application mk hello jni c res 在构建 gradle apply plugin com android application androi
  • Android 中的 ODEX 文件是什么?

    经过一些android安装了应用程序 我发现它会变成odex文件 不是apk 在智 能手机中 这是怎么发生的 谁能教教我 我对此很感兴趣 博客文章 https stackoverflow com a 9593590 194894大部分是正确
  • 无法使用 Zxing Android 扫描 Code 128

    我已将 ZXing 条码阅读器集成到我的 Android 应用程序中 它可以扫描大部分代码 但我有一张电费单 它无法扫描 使用 Galaxy Ace 5 0MP 我认为问题是由于相机分辨率和焦点造成的 因为当我使用 Xperia SL 12
  • Firebase:用户注册后如何进行电话号码验证?

    所以我知道我可以使用电子邮件验证或电话号码验证 但我想做的是在用户注册或登录后进行电话号码验证 如何连接这两种身份验证方法 最后 Firebase中是否有一个函数可以检查用户是否通过电话号码验证 谢谢 即使用户已通过身份验证 您仍然可以使用
  • 使用bindService启动IntentService时是否应该调用onHandleIntent?

    我的服务延伸IntentService当它开始时startService onHandleIntent被叫 但是 当服务启动时bindService 我确实需要绑定 onHandleIntent没有被调用 Should onHandleIn
  • 从 Dropbox 下载文件并将其保存到 SDCARD

    现在我真的很沮丧 我想从 Dropbox 下载一个文件并将该文件保存到 SD 卡中 我得到的代码为 private boolean downloadDropboxFile String dbPath File localFile throw
  • PhoneGap Build Android 不显示闪屏

    这是我的 config xml 中与启动屏幕相关的代码
  • 如何使用socket.io发送图像文件(二进制数据)?

    我无法从以下位置发送数据Android Client to NodeJS Server I use Socket IO 客户端 https github com socketio socket io client java我的客户端中的ja

随机推荐

  • 为什么 as.data.frame 忽略 col.names = vector

    我顽固地尝试在一行中创建一个具有命名行和列的数据框 我意识到我可以通过使用 colnames forecast 轻松地做到这一点 但想简化一下 如果只是为了证明我可以做到这一点 以下不起作用 没有错误 但未设置列名 forecast lt
  • 如何在 iPad 中调整网页大小/重新缩放

    我有一个网站 其移动版本使用 jquery mobile 当我将其从纵向更改为横向时 它会正确放大 但当我翻转到纵向时 它会保持相同的缩放级别 并且比视图更宽 这会破坏用户体验 我使用常规 从我所做的所有搜索来看 这应该可以 不幸的是它不适
  • 处理“超规范化”数据

    我的雇主是一家小型办公用品公司 正在更换供应商 我正在浏览他们的电子内容 以得出一个强大的数据库模式 我们之前的模式几乎是在没有任何思考的情况下拼凑在一起的 这几乎导致了一个令人难以忍受的数据模型 其中包含损坏的 不一致的信息 新供应商的数
  • Laravel 控制器/模型/视图的命名约定是什么?

    我记得听说你应该以特殊的方式命名你的控制器 模型和视图 可以是单数 也可以是复数 我不记得要命名哪些内容 而且我在文档中找不到任何有关它的信息 我猜是这样的 控制器是复数 视图是复数的 模型是单一的 我走在正确的轨道上吗 我知道这只是一个惯
  • 移动时切比雪夫距离 x 坐标错误

    所以我正在复制移相器切比雪夫距离示例 并在解决方案之后here https stackoverflow com questions 75478712 this gamestate variable not recognized phaser
  • 如何在 Django REST Framework 的单元测试期间登录用户?

    这是我的 DRF 视图 api view GET permission classes IsAuthenticated def check user request user request user use user object her
  • mysql中三个表之间的内连接

    我有 3 个表叫做 公司 联系方式 活动 联系人具有公司的外键 公司拥有活动的外键 它们都有一个 名称 列 我需要一个连接表 其中包含联系人姓名 公司名称和活动名称 contact id name company id companies
  • 根据 Woocommerce 中选择的运输方式显示隐藏付款方式

    当我在灵活的运输插件表单 wpdesk 中选择指定的 运输方式 时 我想隐藏某些付款方式并启用另一种付款方式 我已经尝试过该代码 add filter woocommerce available payment gateways gatew
  • Sine CAShapeLayer 作为 CALayer 的掩模

    我正在尝试实现下一个奇怪的事情 我有一些点 我想将它们与正弦波联系起来 Next 方法返回用于绘制绘图的点数组 NSArray plotPointsBetweenPoint CGPoint pointA andPoint CGPoint p
  • 我有多个通过 StackView 推送的 qml 文件。如何将它们连接到 C++

    我的项目包含 6 个 qml 文件 main qml 打开一个新的 ApplicationWindow 并声明工具栏 它还使用 initalItem homescreen qml 初始化 StackView 在主屏幕上 我有不同的按钮 可以
  • 在元构建级别运行 sbt 命令

    sbt 允许我们在根项目级别运行 sbt 命令 如何在元构建级别运行命令 定义在root project project dir 我的用例是我的一些 sbt 插件具有相同依赖项的不同版本 并且较旧的依赖项被逐出 我想使用 sbt depen
  • 如何更改 Android Studio 中的语法突出显示颜色?

    在其他文本编辑器中 可以更改突出显示颜色 例如comment语言的PHP 如何在 Android Studio 中更改单独的突出显示颜色 前往设置 Ctrl Alt S 然后转到IDE 设置 gt 编辑器 gt 颜色和字体 从这里您可以选择
  • ManagedBean 参数不被接受并且 Bean 似乎不在范围内

    这使用来自相同的代码primefaces 树控件 http www primefaces org showcase labs ui treeEvents jsf ManagedBean name theName eager true 第一个
  • 使用 C# Nullable 引用类型将外部 dll 中的所有类型视为可为 null

    我在项目中使用 C Nullable 引用类型 并且引用了一些不支持 Nullable 引用类型的其他 dll 我可以以某种方式告诉编译器外部 dll 中的所有属性都可以为空吗 默认情况下 编译器将所有内容显示为非空 未注释代码中的值被视为
  • 如何在 Android Studio 中对齐/格式化代码?

    是否有一种方法 快捷方式 内置功能可以对齐操作数的代码 例如 符号 例如 有一个用于 Xcode 的 XAlign https github com qfish XAlign https github com qfish XAlign 允许
  • 使用 OCR python 读取图像上的数字

    我正在尝试使用 Python 和 tesseract 中的 OpenCV 提取图像上的数字 这是我的尝试 但我什么也没得到 该代码没有返回预期的数字 import fitz pytesseract os re import cv2 sTem
  • 如何设置Android应用程序的默认语言?

    我用两种语言创建了一个应用程序 第二个 英语 当用户的默认系统语言是英语时使用 如果不是 则使用第一个 我想将第二语言 即英语 设置为默认语言 这意味着当用户打开我的应用程序并且他的系统语言不是第一个语言 也不是英语时 英语将显示为默认语言
  • GSON解析未指定类型变量

    我使用 GSON 库解析服务器 JSON 响应 后端人员有时会告诉我 出于某种原因 我们无法在 JSON 中指定变量类型 旧的 php 他们不知道如何做到这一点等等 GSON 喜欢在其对象模型中使用强类型 所以我无法将对象解析为字符串 GS
  • 有没有办法让 puppeteer 的 waitUntil “networkidle” 只考虑 XHR (ajax)请求?

    我正在使用 puppeteer 来评估我的测试应用程序中基于 javascript 的网页 HTML 这是我用来确保加载所有数据的行 await page setRequestInterception true page on reques
  • RecyclerView LinearLayoutManager 设置项目计数

    在 GridLayoutManager 中 我可以设置跨度计数 这使得视图内的项目调整大小以能够水平适应该跨度计数 我有一个 LinearLayoutManager 我想以同样的方式使用它 有固定数量的可见项目并调整它们的大小以适应 我在同