当前位置: 首页 > news >正文

(原创)从右到左排列RecycleView的数据

问题的提出

当我们写一个Recycleview时,默认的效果大概是这样的:
在这里插入图片描述
当然,我们也可以用表格布局管理器GridLayoutManager做成这样:
在这里插入图片描述
可以看到,默认的绘制方向是:
从左到右,从上到下
那么问题来了,如果我们想要控制列表项的布局方向,该怎么做呢?
比如,我们要做出这样的效果:
在这里插入图片描述
其实也很简单,我们可以这样初始化我们的GridLayoutManager:

GridLayoutManager(context, 3, GridLayoutManager.VERTICAL, true)

其中第三个参数reverseLayout参数是一个布尔值,用于控制列表项的布局方向。
当将其设置为true时,布局将会反转,
这意味着列表项将会从最后一个元素开始布局,向顶部或左部布局(取决于布局的方向)。换句话说,如果你有一个垂直滚动的网格布局,默认情况下,列表项会从顶部向下排列,但如果你设置了reverseLayout=true,它们就会从底部向上排列。
如果是横向的LinearLayoutManager也是一样的
这个问题解决了,那么如果我们想要左右改变方向呢?
比如让元素从右往左去绘制
如果是LinearLayoutManager自然是简单的,可以继续用reverseLayout这个参数
可以如果是GridLayoutManager呢?
比如我们要求GridLayoutManager绘制的顺序为:
从上往下,从右往左
我们就遇到问题了
这是因为LinearLayoutManager只有一个方向纬度
要么上下,要么左右
而GridLayoutManager是要考虑上下和左右两个方向的
当我们用

GridLayoutManager(context, 3, GridLayoutManager.VERTICAL, true)

改变的只是上下的方向
做出来就是上面第三张图的效果
但是现在我们要改变左右的方向
该怎么做呢?
这时候我们就要引入LayoutDirection

LayoutDirection

GridLayoutManager可以调用方法setLayoutDirection改变绘制方向,它的入参有三个选择:

// 设置为从左到右布局
myView.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);

// 设置为从右到左布局
myView.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);

// 布局方向从父视图继承
myView.setLayoutDirection(View.LAYOUT_DIRECTION_INHERIT);

//布局方向由系统决定(有的国家从右到左的)
LAYOUT_DIRECTION_LOCALE

于是我们可以这样写(注意这里我没有改变上下的方向,还是从上到下绘制):

GridLayoutManager(context, 3, GridLayoutManager.VERTICAL, false).apply {//向右对齐setLayoutDirection(View.LAYOUT_DIRECTION_RTL)
}

于是我们可以看到,效果是这样的:
从上到下,从右到左
在这里插入图片描述
对比原先的布局:
从上到下,从左到右
在这里插入图片描述
可以看到,方向是对了
但是数据源展示的顺序也变了
如果我们要这样的效果:
在这里插入图片描述
就需要我们自己翻转下数据源了
翻转规则也很简单
拿这种一行三个元素的举例:
如果一行有三个元素,那么第一个和第三个交换位置
如果一行有两个元素,比如最后一行,则互相交换位置
如果没有元素或者只有一个元素,不处理
这样一来,我们就可以控制好GridLayoutManager上下和左右两个纬度的绘制方向了

注意

LayoutDirection也可以在xml里面配置:
在这里插入图片描述
这样设置要注意一点:
比如我们手机默认是ltr,也就是从左到右
如果你改成从右到左
那么你给这个控件设置的方向相关的属性也会发生反转
比如你的marginLeft,这时候其实是marginRight
因为你的方向发生了反转了
关于LayoutDirection就介绍到这里

总结

对于recycleView,要改变布局方向,可以使用reverseLayout
如果要控制两个纬度的方向(上下和左右),就需要用到LayoutDirection
对于其他控件,也可以使用LayoutDirection改变自己的绘制方向
但是要注意,改变之后,之前的方向相关的属性也会发生反转

相关文章:

(原创)从右到左排列RecycleView的数据

问题的提出 当我们写一个Recycleview时,默认的效果大概是这样的: 当然,我们也可以用表格布局管理器GridLayoutManager做成这样: 可以看到,默认的绘制方向是: 从左到右,从上到下 那么问题来了…...

【C语言】数据指针地址的取值、赋值、自增操作避坑

【C语言】数据指针的取值、赋值、自增操作避坑 文章目录 指针地址指针自增指针取值、赋值附录:压缩字符串、大小端格式转换压缩字符串浮点数压缩Packed-ASCII字符串 大小端转换什么是大端和小端数据传输中的大小端总结大小端转换函数 指针地址 请看下列代码&#…...

Java进阶-SpringCloud使用BeanUtil工具类简化对象之间的属性复制和操作

在Java编程中,BeanUtil工具类是一种强大且便捷的工具,用于简化对象之间的属性复制和操作。本文将介绍BeanUtil的基本功能,通过详细的代码示例展示其应用,并与其他类似工具进行对比。本文还将探讨BeanUtil在实际开发中的优势和使用…...

【ES6】ECMAS6新特性概览(一):变量声明let与const、箭头函数、模板字面量全面解析

🔥 个人主页:空白诗 🔥 热门专栏:【JavaScript】 文章目录 🌿 引言一、 let 和 const - 变量声明的新方式 🌟📌 var的问题回顾📌 let的革新📌 const的不变之美 二、 Arro…...

刷题之从前序遍历与中序遍历序列构造二叉树(leetcode)

从前序遍历与中序遍历序列构造二叉树 前序遍历&#xff1a;中左右 中序遍历&#xff1a;左中右 前序遍历的第一个数必定为根节点&#xff0c;再到中序遍历中找到该数&#xff0c;数的左边是左子树&#xff0c;右边是右子树&#xff0c;进行递归即可。 #include<vector>…...

微信小程序--微信开发者工具使用小技巧(3)

一、微信开发者工具使用小技巧 1、快速创建小程序页面 在app.json中的pages配置项&#xff0c;把需要创建的页面填写上去 2、快捷键使用 进入方式 1&#xff1a; 文件–>首选项–> keyboard shortcuts 进入快捷键查看与设置 进入方式 2&#xff1a; 设置–>快捷键…...

JDBC的 PreparedStatement 的用法和解释

文章目录 前言1、封装数据库连接和关闭操作数据库配置文件 config.properties 2、批量添加操作3、查询操作4、修改和删除操作总结 前言 PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程 1、封装数据库连接和关闭操作 package org.springblade.m…...

LeetCode 面试150

最近准备面试&#xff0c;我以前不愿意面对的 现在保持一颗本心&#xff0c;就是专注于算法思想&#xff0c;语言基础的磨炼&#xff1b; 不为速成&#xff0c;不急功近利的想要比赛&#xff0c;或者为了面试。 单纯的本心&#xff0c;体验算法带来的快乐&#xff0c;是一件非常…...

xmake+xrepo自建仓库添加交叉编译工具链

xmakexrepo自建仓库添加交叉编译工具链 最近想将交叉编译工具链放到xrepo自建仓库中&#xff0c;在xmake中引用&#xff0c;方便多个电脑快速实现交叉编译。 xmake官方文档感觉不够详细&#xff0c;折腾了好久&#xff0c;这里做个记录。 基本步骤如下&#xff1a; 添加自建…...

论文阅读》学习了解自己:一个粗略到精细的个性化对话生成的人物感知训练框架 AAAI 2023

《论文阅读》学习了解自己&#xff1a;一个粗略到精细的个性化对话生成的人物感知训练框架 AAAI 2023 前言 简介研究现状任务定义模型架构Learning to know myselfLearning to avoid Misidentification损失函数实验结果消融实验 前言 亲身阅读感受分享&#xff0c;细节画图解释…...

[Java EE] 网络编程与通信原理(三):网络编程Socket套接字(TCP协议)

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …...

MyBatis懒加载数据(大批量数据处理)

使用范例 Cursor约定使用Iterator去懒加载数据&#xff0c;以时间换空间&#xff0c;非常适合处理通常无法容纳在内存中的数百万个项目查询。如果在 resultMap 中使用集合&#xff0c;则必须使用 resultMap 的 id 列对游标 SQL 查询进行排序(resultOrdered“true”)。 //为了避…...

MySQL--联合索引应用细节应用规范

目录 一、索引覆盖 1.完全覆盖 2.部分覆盖 3.不覆盖索引-where条件不包含联合索引的最左则不覆盖 二、MySQL8.0在索引中的新特性 1.不可见索引 2.倒序索引 三、索引自优化--索引的索引 四、Change Buffer 五、优化器算法 1.查询优化器算法 2.设置算法 3.索引下推 …...

【spring boot+Lazy ORM+mysql】开发一个数据库管理系统实现对应数据库数据查看和修改

【spring bootLazy ORMmysql】开发一个数据库管理系统实现对应数据库数据查看和修改 演示项目地址&#xff1a;http://124.222.48.62:30193/wu-smart-acw-ui/index.html#/login &#xff08;admin/admin&#xff09; 功能 用户登录注册新增、编辑数实例新增、编辑数据库信息…...

知识分享:隔多久查询一次网贷大数据信用报告比较好?

随着互联网金融的快速发展&#xff0c;越来越多的人开始接触和使用网络贷款。而在这个过程中&#xff0c;网贷大数据信用报告成为了评估借款人信用状况的重要依据。那么&#xff0c;隔多久查询一次网贷大数据信用报告比较好呢?接下来随小易大数据平台小编去看看吧。 首先&…...

【Day8:JAVA字符串的学习】

目录 1、常用API2、String类2.1 String类的特点2.2 String类的常见构造方法2.3 String类的常见面试题&#xff1a;2.3.1 面试题一&#xff1a;2.3.2 面试题二&#xff1a;2.3.3 面试题三&#xff1a;2.3.4 面试题四&#xff1a; 2.4 String类字符串用于比较的方法2.5 String类字…...

jetcache缓存

1 介绍 是阿里的双极缓存&#xff0c;jvm-->redis-->数据库 文档&#xff1a;jetcache/docs/CN at master alibaba/jetcache GitHub 2 注意事项 使用的实体类一定实现序列化接口定时刷新注解&#xff0c;慎用 它会为每一个key创建一个定时器 &#xff1a;场景为&…...

SQLSyntaxErrorException: FUNCTION dbname.to_timestamp does not exist

由于MySQL数据库高版本&#xff08;如8.x&#xff09;中有to_timestamp(&#xff09;函数&#xff0c;低版本中&#xff08;如5.7.x&#xff09;没有这个函数&#xff0c;服务运行报错。 自己创建函数实现功能&#xff0c;创建语句如下&#xff1b; DELIMITER // CREATE FUN…...

Borel-Cantelli 引理

翻译自大佬 https://huarui1998.com/Notes/math/borel-cantelli.html 1. 集序列的 lim ⁡ inf ⁡ \lim\inf liminf 和 lim ⁡ sup ⁡ \lim\sup limsup 类似于定义实数序列 { a k } \{a_k\} {ak​} 的 lim ⁡ inf ⁡ \lim\inf liminf 和 lim ⁡ sup ⁡ \lim\sup limsup, …...

算法训练营第四十一天 | LeetCode 509 斐波那契数列、LeetCode 70 爬楼梯、LeetCode 746 使用最小花费爬楼梯

LeetCode 509 斐波那契数列 这题动规五部曲都定义得比较明确。首先是dp数组下标&#xff0c;题目中给定F(0) 0说明从0开始&#xff0c;dp[i]直接表示F(i)的值即可。递推公式也直接给出了&#xff0c;也给了开头两个作为递推基础的数值作为初始化依据。遍历顺序也指明是从前往…...

DeepSeek LeetCode 1210. 穿过迷宫的最少移动次数 public int minimumMoves(int[][] grid)

我来分析 LeetCode 1210 “穿过迷宫的最少移动次数” 的解题思路和实现。 问题分析 我们有一条长度为 2 的蛇&#xff0c;需要从起点 (0,0) 和 (0,1)&#xff08;水平放置&#xff09;移动到终点 (n-1, n-2) 和 (n-1, n-1)&#xff08;仍为水平放置&#xff09;。蛇可以&#x…...

创作灵感枯竭?试试Asian Beauty Z-Image Turbo:一键生成多种东方人物设定

创作灵感枯竭&#xff1f;试试Asian Beauty Z-Image Turbo&#xff1a;一键生成多种东方人物设定 1. 为什么你需要这个东方美学生成工具 作为一名内容创作者&#xff0c;你是否经常遇到这样的困境&#xff1a;脑海中构思了完美的东方人物形象&#xff0c;却苦于找不到合适的视…...

校园生活服务类小程序源码全解析:前后端配套开箱即用

目概述这套校园生活服务小程序系统专为高校场景打造&#xff0c;采用前后端分离架构&#xff0c;支持多校区隔离、多角色权限控制。系统集成了校园生活中最高频的几大功能模块&#xff0c;助力学校、学生会或创业团队快速搭建统一、规范、可运营的校园数字社区。核心功能模块1.…...

【面板数据】A股上市公司研发投入数据(2000-2024年)

数据简介&#xff1a;作为评估企业创新能力与可持续发展潜力的关键维度&#xff0c;上市公司研发投入呈现显著的行业差异化特征&#xff0c;但总体保持稳健增长态势。随着信息披露监管要求的持续强化&#xff0c;研发投入透明度已成为提升企业市场信誉的重要抓手。值得注意的是…...

OpenClaw性能优化指南:千问3.5-35B-A3B-FP8长任务处理技巧

OpenClaw性能优化指南&#xff1a;千问3.5-35B-A3B-FP8长任务处理技巧 1. 长任务处理的痛点与优化思路 当我第一次尝试用OpenClaw对接千问3.5-35B-A3B-FP8模型处理复杂多模态任务时&#xff0c;遇到了几个典型问题&#xff1a;一个包含20张产品图片的分析任务&#xff0c;运行…...

5分钟快速上手MUNIT:从零开始构建你的第一个图像翻译模型

5分钟快速上手MUNIT&#xff1a;从零开始构建你的第一个图像翻译模型 【免费下载链接】MUNIT Multimodal Unsupervised Image-to-Image Translation 项目地址: https://gitcode.com/gh_mirrors/mu/MUNIT MUNIT&#xff08;Multimodal Unsupervised Image-to-Image Trans…...

终极指南:如何从零构建Cubism.js自定义数据源适配器

终极指南&#xff1a;如何从零构建Cubism.js自定义数据源适配器 【免费下载链接】cubism Cubism.js: A JavaScript library for time series visualization. 项目地址: https://gitcode.com/gh_mirrors/cu/cubism Cubism.js是一个强大的JavaScript时间序列可视化库&…...

力扣热门100题之最大子数组和

最优解法&#xff1a;Kadane 算法&#xff08;一遍遍历&#xff09;核心思想遍历数组时&#xff0c;维护当前最大和如果前面的和是负数&#xff0c;只会拖累当前数&#xff0c;直接抛弃前面否则&#xff0c;把当前数加进去全程记录最大值完整代码实现&#xff1a;class Solutio…...

LLM wiki:karpathy 公开构建个人本地知识库详细方法「超强提示词」

来源&#xff1a;AI寒武纪 前两天我写文章介绍了Andrej Karpathy构建个人本地知识库的工作流方法&#xff0c;目前这个思路已经火爆全网 Karpathy最新硬核分享&#xff1a;用大模型和Obsidian打造个人本地知识库 不过有朋友抱怨AK是在炫技&#xff0c;没有操作性&#xff0c;不…...

UG NX 合并曲面减少面得数量

“同步建模”里的“优化面” 确实是处理这类问题最直接、最高效的命令。对于客户发来的非参数化模型&#xff08;比如 STP、IGS 等&#xff09;&#xff0c;中间有碎线或分割线导致的“假面”&#xff0c;用它来合并非常合适。核心操作&#xff1a;使用“优化面”命令 启动命令…...