Android RecycleView列表使用GridLayoutManager 均分子项Item,且左右宽度相同

2023-11-03

1.需求描述:

列表分为一列两个,两个子项宽度一致,且左右边距一样,就是要好看,子项宽度适配手机,高度适配宽度。

2.问题描述:

但是我们直接设置的时候,他的子项会在给他的布局的左边,于是我想到了设置下子项的左右边距,但是android手机屏幕太多种类型了,所以在部分手机上,也不大行。

3:解决办法:

既然要匹配手机屏幕宽度,那就让手机宽度来决定子项宽度。

1.在 XML 布局文件中,将 RecyclerView 的宽度设置为 match_parent

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

但是一般的为了美观,都会让列表有边距,这里自行设置

2.在代码中,设置 GridLayoutManager 并应用到 RecyclerView

RecyclerView recyclerView = findViewById(R.id.recyclerView);
GridLayoutManager layoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(layoutManager);

3.创建 RecyclerView 的 Adapter,并在 Adapter 中重写 onCreateViewHolder() 方法(记得是在Adapter里面写代码)

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
    // 计算子项的宽度
    int screenWidth = parent.getContext().getResources().getDisplayMetrics().widthPixels;
    int itemWidth = (screenWidth - dpToPx(40)) / 2;
    // 设置子项的宽度
    view.getLayoutParams().width = itemWidth;
    return new ViewHolder(view);
}

private int dpToPx(int dp) {
    float density = getResources().getDisplayMetrics().density;//这个getresources需要context对象哈,拿activity的也行,application的也行
    return Math.round(dp * density);
}

上面我减去了40dp,就是为了美观点,不然两个子项直接怼一起了,很丑哦~~

这样就可以了。之前是设置decoration,发现不太行,还是得适配手机宽度才行。

当然,如果每个子项的宽会随内容改变,建议使用流布局哈。

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

Android RecycleView列表使用GridLayoutManager 均分子项Item,且左右宽度相同 的相关文章

  • BottomNavigationView - 如何获取选定的菜单项?

    我使用BottomNavigationView来切换片段 如何获取当前选定的菜单项 以防止重新打开片段 BottomNavigationView bottomNavigationView BottomNavigationView findV
  • 在应用程序简历中隐藏软键盘

    我有一个 Android 应用程序 使用 Xamarin 用 C 编写 我已将应用程序简化为包含 TextView 和用于横幅广告的 Google admod AdView 的 LinearLayout 我不希望软键盘出现在应用程序中 这不
  • GCM 向主题发送消息:TOO_MANY_TOPICS 错误

    以前 GCM 每个应用程序有 100 万个主题订阅的限制 我发现他们现在已经取消了这一限制 基于发布 订阅模型 主题消息支持 每个应用程序无限订阅 https developers google com cloud messaging to
  • 检测到设备正在振动?

    我使用下面的代码来振动设备 public void vibrator try Vibrator vibrator Vibrator getSystemService Context VIBRATOR SERVICE vibrator vib
  • 共同的偏好不断消失

    我正在使用共享首选项来存储我的应用程序的登录凭据 除了一个用户之外 一切正常 一段时间后 共享偏好似乎会以某种方式重置或清除 我已针对该用户调整了我的应用程序 使其不再清除他的共享偏好设置 这样我就可以确定这不是我的应用程序的错 但即使在这
  • 菜单未显示在应用程序中

    由于某种原因 我的操作菜单在我的 Android Studio 应用程序中消失了 我正在按照教程学习如何创建 Android 应用程序 但最终遇到了这个问题 我正在使用 atm 的教程 http www raywenderlich com
  • Android libgdx 首选项丢失

    我在 Libgdx 引擎中创建了 Android 游戏 一段时间后 我注意到在某些应用程序杀手中杀死该应用程序后 或者如果我在 Android 设置中执行 强制关闭 操作 我保存到首选项中的游戏选项就会丢失 有办法防止这种情况吗 我从来没有
  • KitKat(及更低版本)设备上的 Android Material Design

    我将在我们学校开发一个 Android 应用程序作为一个项目 我想使用 Google 的新 Material Design 但我知道它仅适用于 Android L 设备 Jack Underwood 最近发布了名为 Today Calend
  • 如果我们使用后退按钮退出,为什么 Android 应用程序会重新启动?

    按住主页按钮并返回应用程序时 应用程序不会重新启动 为什么使用后退按钮会重新启动 如果我们使用后退按钮退出 有什么方法可以解决在不重新启动的情况下获取应用程序的问题吗 请帮忙 当您按下Home按钮 应用程序将暂停并保存当前状态 最后应用程序
  • Android Studio 在编译时未检测到支持库

    由于 Android Studio 将成为 Android 开发的默认 IDE 因此我决定将现有项目迁移到 Android studio 中 项目结构似乎不同 我的项目中的文件夹层次结构如下 Complete Project gt idea
  • 在 Android 中使用 DataOutputStream 在 POST 正文中发送特殊字符 (ë ä ï)

    我目前正在开发一个具有大量服务器端通信的 Android 应用程序 昨天 我收到一份错误报告 称用户无法发送 简单 特殊字符 例如 我搜索过但没有找到任何有用的东西 可能重复 没有答案 https stackoverflow com que
  • 如何在 sqlite 中将 2 列合并为新列

    我有一个包含 3 列的表 我必须将 2 列中的值按降序排列到一列中 A B C z 1 2 f 5 7 s 9 5 使用此示例 输出会将 B 列和 C 列中的值放入其中 如下所示 A B s 9 f 7 f 5 s 5 z 2 z 1 我当
  • Android 版 Robotium - solo.searchText () 不起作用

    我在使用 Robotium 时遇到 searchText 函数问题 我正在寻找这个字符串
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • 调节麦克风录音音量

    我们正在尝试调整录音时的音量级别 麦克风似乎非常敏感 会接收到很多静电 我们查看了 setVolumeControlStream 但找不到传入其中来控制麦克风的流 将您的音频源设置为 MIC using MediaRecorder Audi
  • Android 设备上的静默安装

    我已经接受了一段时间了 在 Android 上静默安装应用程序是不可能的 也就是说 让程序安装捆绑为 APK 的应用程序 而不提供标准操作系统安装提示并完成应用程序安装程序活动 但现在我已经拿到了 Appbrain 快速网络安装程序的副本
  • 如何将设备连接到Eclipse?

    我无法解决这个简单的问题 我正在尝试通过 USB 电缆将我的设备连接到 Eclipse 在我的 PC 上 我已经安装了 Eclipse 和 Android SDK 并且在模拟器上运行该程序运行良好 我已在我的电脑上下载并安装了 Samsun
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • 当手机旋转(方向改变)时如何最好地重新创建标记/折线

    背景 开发一个使用 Android Google Map v2 的本机 Android 应用程序 使用android support v4 app FragmentActivity 在 Android v2 2 上运行 客观的 在更改手机方
  • 使用 Espresso 检查 EditText 的字体大小、高度和宽度

    如何使用 Espresso 检查 EditText 的字体大小 高度和宽度 目前要分割我使用的文本 onView withId R id editText1 perform clearText typeText Amr 并阅读文本 onVi

随机推荐

  • 高性能Key/Value存储引擎levelDB, rocksDB, TiDB,InnoDB

    高性能存储引擎levelDB rocksDB TiDB InnoDB 1 简单介绍 1 1 LevelDB LevelDB是Google开源的持久化KV单机数据库 具有很高的随机写 顺序读 写性能 但是随机读的性能很一般 也就是说 Leve
  • 在windows系统中使用Ceres非线性优化库:(一)安装Ceres库

    一 安装Ceres库 1 用vcpkg安装Ceres库 1 1 安装vcpkg 1 2 安装Ceres 1 3 配置Ceres 2 用Virtual Studio安装Ceres库 2 1 下载ceres windows 2 2 打开或升级解
  • mysql查询每个学生最高分_mysql查询各班最高分学生的信息

    学生表student 班级表class 课程表subject 成绩表score 一 查询各班最高分学生的信息 1 从成绩表score中查询每个学生的总成绩并按降序排列 select sc stu id sum sc score sumsco
  • 小程序图片懒加载放在服务器,【小程序】使用uni-app搭建小程序环境---图片懒加载...

    延迟加载的理念 页面初始化时 暂不加载处于屏幕可见区域之外的图片 该方案会有如下几大好处 n加快页面渲染速度 n提升页面滚动性能 n默认不下载屏幕外的图片 减少网络流量 主标题 列表二级标题 exportdefault data varim
  • 手写Android事件分发

    Android事件分发原理搞清楚可以辅助我们解决很多实际项目中遇到的事件冲突等问题 1 进入正题之前 问大家几个事件相关的问题 标签 dispatchTouchEvent Q1 Android点击事件传递规则是怎样的 下面几步仔细阅读2遍
  • Gradle基础知识

    转自 https blog csdn net xingzhong128 article details 80290166 前言 随着业务需求变得越来越复杂 项目的规模也变得越来越大 项目越大包含的代码资源文件也就越多 而越大的项目往往需要越
  • 图书管理系统(包含找回密码、设置密保等) C语言

    目录 一 需求分析 二 概要设计 1 程序设计框架 2 数据结构 3 模块函数划分 三 详细设计 1 main主函数 2 主菜单函数 3 密保 4 管理员登录 5 修改管理员账号和密码 6 录入图书 7 输出图书 8 修改图书 9 删除图书
  • android-studio undefined reference to `__android_log_print

    最近在使用android studio编译安卓程序 要用到jni 我在jni源码中引用了 android log print 且在Android mk中加了LOCAL LDLIBS llog 但是编译时还是会出现如下错误 Error 82
  • PHP 实现抽奖功能

    1 场景 商品抽奖 用户参与抽奖后 分享页面给新用户 并且新用户也参与抽奖 然后为上个用户增加一次抽奖码 2 问题 用户获得的抽奖码机会只为了增加自己的中奖概率 一次活动的产品一个用户只 能中一次 public function index
  • 00天精通Python(基础篇)——第10天:字符串格式化

    文章目录 python中常用的数据类型占位 示例 示例代码 python中常用的数据类型占位 示例 占位符 变量 占位符 s d f 我们可以通过如下语法 完成字符串和变量的拼接 示例代码 name 科比 time 2006 score 8
  • getCurrentInstance

    https blog csdn net m0 46318298 article details 130726043 注 是在vue中所有实例中都可用的一个简单约定 这样做会避免和已被定义的数据 方法 计算属性产生冲突
  • ‘pip’不是内部或外部命令---Python+OpenCV配置过程中常见问题

    1 用pip进行安装时 输入pip命令会提示 pip 不是内部或外部命令 在python安装目录中找得到script文件夹 查看文件夹内部是否存在pip3 exe这个文件 下面以我的电脑为例 如果没有 在命令行输入 python m ens
  • stream, parser, 文法的一些概念

    stream就是个Iterable
  • leaftlet入门教程一

    1 实时输出坐标 监听 mousemove 事件 map on mousemove e gt let latlng e latlng console log latlng lat 30 59 lng 114 32 取消 mousemove
  • 全球及中国废钢市场发展机遇与十四五运行潜力调研报告2022版

    全球及中国废钢市场发展机遇与十四五运行潜力调研报告2022版 修订日期 2021年11月 搜索鸿晟信合研究院查看官网更多内容 第一章 废钢相关概述 1 1 废钢基本概念 1 1 1 废钢的定义 1 1 2 废钢的来源 1 1 3 废钢的分类
  • 开源进展

    作为连接实体对象 人或物 的现实身份与链上身份的可信映射 实现实体对象之间安全可信的数据授权与交换 分布式身份技术解决方案在推动区块链应用繁荣及可信数据流转的过程中扮演着重要角色 WeIdentity是由微众银行自主研发并完全开源的一套分布
  • Failed to execute ‘pushState‘ on ‘History‘: function nextWeek(now)......

    我在使用react跳转页面传参数时 报了上述错误 具体代码为 原因 saveData里面存在函数 我在传值的时候 参数里面有时间格式的数据 里面包含函数 所以不能跳转 需要把时间格式的数据转换成字符串或其他形式 我转换成了YYYY MM D
  • C++基础-基础数据类型

    目录 类型简介 整型 整型类型宽度 整型类型取值范围 如何选择适合的整型 整型字面量 整型字面量的表示形式 如何确定整型字面量的类型 本节了解即可 char类型 char类型的符号 字符字面量 bool类型 浮点类型 浮点数内部存储方式简介
  • 干货分享

    在企业数字化转型的过程中 尤其随着互联网 云计算 大数据等信息技术与通信技术的迅猛发展 海量数据在各种信息系统上被存储和处理 其中包含大量有价值的敏感数据 这意味着数据泄露的风险也不断增加 数据泄露可能由各种因素引起 包括恶意攻击 黑客入侵
  • Android RecycleView列表使用GridLayoutManager 均分子项Item,且左右宽度相同

    1 需求描述 列表分为一列两个 两个子项宽度一致 且左右边距一样 就是要好看 子项宽度适配手机 高度适配宽度 2 问题描述 但是我们直接设置的时候 他的子项会在给他的布局的左边 于是我想到了设置下子项的左右边距 但是android手机屏幕太