首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

具有Kotlin的RecyclerView不垂直布局单元格

是指在使用Kotlin语言开发Android应用时,使用RecyclerView控件来展示数据列表时,单元格的布局方式不是垂直方向排列。

RecyclerView是Android提供的高度灵活的控件,用于展示大量数据列表。它通过使用LayoutManager来控制单元格的布局方式。默认情况下,RecyclerView的LayoutManager是垂直布局的,即单元格按照垂直方向依次排列。

如果想要实现不垂直布局的单元格,可以通过自定义LayoutManager来实现。自定义LayoutManager需要继承自RecyclerView.LayoutManager,并重写一些关键方法来控制单元格的布局方式。

以下是一个示例的自定义LayoutManager代码,实现了水平方向排列的单元格布局:

代码语言:kotlin
复制
class HorizontalLayoutManager(context: Context) : RecyclerView.LayoutManager() {

    override fun generateDefaultLayoutParams(): RecyclerView.LayoutParams {
        return RecyclerView.LayoutParams(
            RecyclerView.LayoutParams.WRAP_CONTENT,
            RecyclerView.LayoutParams.WRAP_CONTENT
        )
    }

    override fun onLayoutChildren(recycler: RecyclerView.Recycler, state: RecyclerView.State) {
        detachAndScrapAttachedViews(recycler)
        
        var offsetX = 0
        for (i in 0 until itemCount) {
            val view = recycler.getViewForPosition(i)
            addView(view)
            measureChildWithMargins(view, 0, 0)
            val width = getDecoratedMeasuredWidth(view)
            val height = getDecoratedMeasuredHeight(view)
            layoutDecorated(view, offsetX, 0, offsetX + width, height)
            offsetX += width
        }
    }
}

在上述代码中,我们重写了generateDefaultLayoutParams方法来设置单元格的默认布局参数。然后,在onLayoutChildren方法中,我们先将所有已存在的子视图分离并回收,然后按照水平方向依次布局每个单元格。

使用自定义LayoutManager时,需要将其设置给RecyclerView:

代码语言:kotlin
复制
val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
recyclerView.layoutManager = HorizontalLayoutManager(this)

这样,RecyclerView就会按照水平方向排列单元格了。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android-ViewPager2

布局是Right To Left 布局也就是从右往左布局,大家知道我们平常写布局都是从左往右,但是如果你适配阿拉伯语等环境UI布局,他们写法是从右往左,具体这里不做研究。...API变动: FragmentStateAdapter替换了原来 FragmentStatePagerAdapter RecyclerView.Adapter替换了原来 PagerAdapter...registerOnPageChangeCallback替换了原来 addPageChangeListener ViewPager2是直接继承ViewGroup,意味着和ViewPager兼容.ViewPager2...核心实现就是RecyclerView+LinearLayoutManager了,因为LinearLayoutManager本身就支持竖向和横向两种布局方式,所以ViewPager2也能很容易地支持这两种滚动方向了...具体使用我查看了Googlegithub仓库,地址 :ViewPager2 注意GithubViewPager2是Kotlin版本,我在这里给大家翻译成Java版本进行解读。

1.4K20

重拾安卓:自定义View之表格封装实现

列数固定,不管有多少列,都平分父容器宽度,每列宽度一致 表头设置灰色背景,单元格是白色背景 实现原理: 两层 RecyclerView 嵌套,最外层是垂直方向 RecyclerView,每一行是一个...每行又包含一个内层 RecyclerView,每行每个单元格是内层 RecyclerView item。...这个 View 很简单,先在构造方法里绑定 xml 布局,再执行初始化方法初始数据,然后在 onLayout 中计算每个单元格宽度,最后对外暴露一个方法设置数据。...(mCellAdapter); } } 2.4 外层 RecyclerView item 布局文件 item_student_work_table_view.xml 外层 item 布局文件里也只有一个... item 布局文件 item_student_work_cell.xml 这是每个单元格布局文件,无论多复杂布局都可以做,这里只放一个 TextView 演示。

73900

kotlin-android-extensions插件也被废弃了?扶我起来

最重要是,这些内容对于绝大部分开发者来说都是黑盒,使用kotlin-android-extensions插件的人可能并不知道这些隐藏“坑”,这个问题在稍后介绍RecyclerView Adapter...当然,如果有些布局文件你希望为它生成对应Binding类,可以在该布局文件根元素位置加入如下声明: <LinearLayout xmlns:tools="http://schemas.android.com...而<em>RecyclerView</em>把ListView中<em>的</em>这个普遍应用<em>的</em>最佳实践直接作为默认实现集成了进去,所以只要我们使用<em>RecyclerView</em>,就一定要写ViewHolder。...假设我们定义了fruit_item.xml来作为<em>RecyclerView</em>子项<em>的</em><em>布局</em>: <LinearLayout xmlns:android="http://schemas.android.com/apk...讲完了kotlin-android-extensions插件“坑”,接下来我们还是看一下如何在Adapter中使用ViewBinding,别忘了我们目标始终是写findViewById。

2.8K31

Android:流式布局实现总结

1 什么是流式布局/标签 说白了呢,就是一种参差不齐视图,比如: 水平流式布局 ? 垂直流式布局 ? 多条目类型流式布局 ? 2实现方式有哪些?...实现流式布局方式大致有如下五种: 自定义FlowLayout ChipGroups RecyclerView+StaggeredGridLayoutManager RecyclerView+FlexboxLayoutManager...通常情况下,与ChipGroup配套使用是Chip——也就是ChipGroup中条目。Chip本身具有选中和点击状态,也可以加入图片,可以修改文本(颜色、字号、字体等)。...4完整示例代码-kotlin版 (1)、完整动态效果示意图 ?...(2)、示例代码 FlowImplActivity.kt /** * CnPeng 2018/12/6 5:35 PM * 功用:流式布局/标签实现方式总结 * 说明: * 1、流式布局/标签实现方式大致有

4K20

Android 自定义LayoutManager实现花式表格

如果你对RecyclerView原理还不是特别了解,非常建议你读一下。 本文项目也是学习自定义LayoutManager绝佳资料,大家有需要可以好好拜读。...大佬写控件确实给我工作带来了极大方便,不过还是有些问题存在: 无法实现不规则表格 其核心是二层RecyclerView嵌套,如果只用一层RecyclerView将会带来性能提升 多个RecyclerView...TableView具有如下特点: 支持不规则表格 同时支持横向和纵向滚动 支持顶部和左侧悬浮 基于RecyclerView,所以RecyclerView自定义子视图、高效回收、子视图多样性这些特点它都有...为了确保表格每一个单元格长度和宽度都一样(子视图可以在横纵方向上占有多个单元格),宽和高都使用两种方式: 设置具体值,那么单元格宽或者高值就是具体 设置一行或者一列可以容纳单元格数量 所以宽高各有两种...<TableCell onCreateViewHolder(View root, int itemType) { // itemType是子视图布局文件 // 根据布局返回具体ViewHolder

1.7K21

Kotlin入门(23)适配器进阶表达

为方便理解循环适配器Kotlin编码,下面以微信公众号消息列表为例,给出对应消息列表Kotlin代码: //ViewHolder在构造时初始化布局控件对象 class RecyclerLinearAdapter...根据这种设计思路,提取出了循环视图基础适配器,它Kotlin代码如下所示: //循环视图基础适配器 abstract class RecyclerBaseAdapter<VH : RecyclerView.ViewHolder...对于第一个布局编码,可以考虑将其作为一个整型输入参数;对于第二个数据结构,可以考虑定义一个模板类,在外部调用时再指定具体数据类;对于第三个bind方法,若是Java编码早已束手无策,现用Kotlin...这三类要素包括: //布局文件对应资源编号、列表项数据结构、各个控件对象初始化操作 class RecyclerCommonAdapter(context: Context, private...尤其是最后两种实现方式,分别运用了Kotlin多项综合技术,才能集Kotlin精妙语法之大成。 点此查看Kotlin入门教程完整目录

1.8K41

RecyclerView】 三、RecyclerView 布局 ( 线性布局管理器 LinearLayoutManager )

文章目录 一、线性布局 1、线性布局管理器 LinearLayoutManager 2、垂直翻转代码示例 3、水平翻转代码示例 二、完整代码示例 三、RecyclerView 相关资料 本篇博客主要讨论设置不同布局管理器..., 以及不同布局管理器参数设置 , 基础用法参考 【RecyclerView】 一、RecyclerView 最基本用法 ( 添加支持库 | 设置布局文件 | 自定义适配器 ) , 以及 RecyclerView...(orientation); setReverseLayout(reverseLayout); } 2、垂直翻转代码示例 RecyclerView 适配器代码 : 【RecyclerView...】 一、RecyclerView 最基本用法 ( 添加支持库 | 设置布局文件 | 自定义适配器 ) 三、自定义适配器 , 本篇博客中使用适配器代码都是该代码 ; 初始化布局管理器及设置布局管理器 :...这里创建 LinearLayoutManager 是标准垂直方向列表 , 翻转元素 ; //1 .

68400

Kotlin如何直接使用控件ID原理详析

前言 最近断断续续地把项目的界面部分代码由JAva改成了Kotlin编写,并且如果应用了kotlin-android-extensions插件,一个显而易见好处是再也不用写 findViewById...()来实例化你控件对象了,直接操作你在布局文件里id即可,这一点我感觉比butterknife做还简洁友好。...*是kotlin-android-extensions插件自动生成。下面我们来解析下原理。...其他(动态布局) 除了Activity和Fragment,我们用最多UI布局当属Adapter了,kotlin-android-extensions也提供了对这一类动态布局支持。..._$_findViewCache.clear(); } } } 总结 以上就是这篇文章全部内容了,希望本文内容对大家学习或者工作具有一定参考学习价值,如果有疑问大家可以留言交流,谢谢大家对

1.7K20

ViewBinding 与 Kotlin 委托双剑合璧

只支持 Kotlin 语言; 5、收敛模板代码: 基本上每种方案都带有一定量模板代码,只有 Kotlin Synthetics 模板代码是较少。...1.3 ViewBinding 实现原理 AGP 插件会为每个 XML 布局文件创建一个绑定类文件 xxxBinding ,绑定类中会持有布局文件中所有带 android:id 属性 View 引用...那么,所有 XML 布局文件都生成 Java 类,会不会导致包体积瞬间增大?不会, 未使用类会在混淆时被压缩。 ---- 2....那么,有没有可优化方案呢?我们想起了 Kotlin 属性委托,关于 Kotlin 委托机制在我之前一篇文章里讨论过:Kotlin | 委托机制 & 原理[7]。...总结 ViewBinding 是一个轻量级视图绑定方案,Android Gradle 插件会为每个 XML 布局文件创建一个绑定类。

1.6K20

安卓常用控件

ListView ListView 是一个用于显示滚动列表控件,每个列表项可以是一个自定义视图。 使用步骤 定义布局: 创建一个包含 ListView 布局。...RecyclerView RecyclerView 是一个更灵活和高效列表控件,可以替代 ListView。它支持布局管理器和视图持有者(ViewHolder)模式。...使用步骤 定义布局: 创建一个包含 RecyclerView 布局。 创建适配器: 实现 RecyclerView.Adapter,定义数据和视图绑定逻辑。...设置布局管理器: 选择适当布局管理器(如 LinearLayoutManager 或 GridLayoutManager)。 设置适配器: 将适配器设置到 RecyclerView 上。...="match_parent" android:id="@+id/recyclerView"/> 在 Activity 中使用 RecyclerViewkotlin 复制代码 val recyclerView

8110

RecyclerView】 十五、使用 ItemTouchHelper 实现 RecyclerView 拖动排序 ( ItemTouchHelper 简介 )

/reference/kotlin/androidx/recyclerview/widget/ItemTouchHelper ItemTouchHelper 可以为 RecyclerView 添加 滑动删除效果...和 拖动效果 ; ItemTouchHelper 需要与 RecyclerView 和 ItemTouchHelper.Callback 结合起来使用 ; 根据想要开发功能 , 重写不同方法 ;...如果是想要开发拖动效果相关功能 , 重写 ItemTouchHelper.Callback onMoved 方法 ; public abstract boolean onMove(...抽象类 , 或 实现 ItemTouchHelper.Callback 接口 , 这两个操作 自定义 LayoutManager 布局管理器 , 可以达到最优化效果 ; 看一下 Android 官方定义.../reference/kotlin/androidx/recyclerview/widget/ItemTouchHelper.Callback 代码示例 : GitHub 源码地址 : https://

80300

RecyclerView】 四、RecyclerView 布局 ( 网格局管理器 GridLayoutManager )

文章目录 一、网格局管理器 GridLayoutManager 二、网格局管理器默认设置 三、网格局管理器水平方向设置 四、完整代码示例 五、RecyclerView 相关资料 本篇博客主要讨论设置不同布局管理器..., 以及不同布局管理器参数设置 , 基础用法参考 【RecyclerView】 一、RecyclerView 最基本用法 ( 添加支持库 | 设置布局文件 | 自定义适配器 ) , 以及 RecyclerView...当方向是 RecyclerView.VERTICAL 垂直方向时 , 网格元素排列顺序是逐行排列 , 先将第一行排满 , 然后将第二行排满 , int spanCount 参数设置是每行元素个数 ;...* @param spanCount 网格布局行或列个数. * @param orientation 布局方向...., 翻转 , 代码如下 : //1 .

1.5K00

Google挖坑后人埋-ViewBinding(上)

资源ID重名 由于kotlin-android-extensions是通过viewid名直接引用,所以多个布局同名id,就需要手动对import进行重命名处理,而且经常会引用错误布局文件,导致运行崩溃...当然也有一些优势: Kotlin Java通吃 空安全 ViewBinding初步 ViewBinding就是为了解决kotlin-android-extensions这些使用问题而诞生,它目的只有一个...class DemoAdapter(val dataList: List) : RecyclerView.Adapter() {...include来引入新布局也是一个很常用方式,kotlin-android-extensions由于底层使用是运行时findViewById,所以不会存在什么问题,但是ViewBinding就不一样了...另外一种方式是直接使用新Binding文件,因为所有的xml布局文件都会生成Binding,所以可以直接使用这个Binding文件。

2.1K20

RecyclerView性能优化最后一公里

聊聊RecyclerView缓存机制和详细聊聊RecyclerView缓存机制,前者主要是介绍各个层级缓存作用以及它们之间区别,后者主要是从源码角度讲解缓存是怎么实现。..."减少ItemView嵌套层级,让布局尽量轻量级"或者减少ItemViewinflate时长会是RecyclerView性能优化众多Tips中其二。这样方案当然没问题。...但是现实有可能是,ItemView本身就是很复杂,将它布局优化之后inflate还是很耗时 或者ItemView是前辈写,太复杂了,后继开发者无能为力或者不愿意去修改它。...当然你可能会说,我用ConstraintLayout将布局优化到极致,我能力强而且能吃苦耐劳,前辈写复杂且低效布局我有信心有能力优化好。退一步讲,这些你都做很好了。...解决方案:为itemView设置RecyclerView.LayoutParems。 ViewHolder不能为空。解决方案:反射设置ViewHolder。 布局间距不正确。

1.3K20

第14章 使用Kotlin 进行 Android 开发(2)

电影列表整体布局 UI 视图数据适配器 ViewAdapter 我们在创建 MovieListActivity 过程中需要展示响应数据,这些数据由 ViewAdapter 来承载,对应代码如下...其中电影海报是图片,所以我们布局文件中使用了 ImageView,对应布局文件是 movie_list_content.xml ,代码如下 <?...电影详情页 本章小结 Android 中经常出现空引用、API冗余样板式代码等都是是驱动我们转向 Kotlin 语言动力。...另外,Kotlin Android 视图 DSL Anko 可以我们从繁杂 XML 视图配置文件中解放出来。...我们可以像在 Java 中一样方便使用 Android 开发流行库诸如 Butter Knife、Realm、RecyclerView等。

1.1K20

RecyclerView详解

RecyclerView support 包里默认提供了三个 LayoutManager,分别是下列三个,可用于实现大部分场景布局需求:线性布局、网格布局、瀑布流布局等等。...:recyclerview-v7:27.1.1' 2.布局中添加RecyclerView <?...设置为垂直布局,默认是垂直垂直:LinearLayoutManager.VERTICAL,水平:LinearLayoutManager.HORIZONTAL) linearLayoutManager.setOrientation...LinearLayoutManager(this); //设置为垂直布局,默认是垂直垂直:LinearLayoutManager.VERTICAL,水平:LinearLayoutManager.HORIZONTAL...瀑布流样式和网格样式区别 也许有人会疑惑,瀑布流就是设置下几行或者几列,然后设定下方向而已。网格样式时也一样是设置下几行或几列,也一样是要再设置个方向。

2.9K21

RecyclerView】 五、RecyclerView 布局 ( 瀑布流 | 交错网格局管理器 StaggeredGridLayoutManager )

相关资料 本篇博客主要讨论设置不同布局管理器 , 以及不同布局管理器参数设置 , 基础用法参考 【RecyclerView】 一、RecyclerView 最基本用法 ( 添加支持库 | 设置布局文件...如果当前方向是垂直方向, 该参数设置是行数. 如果当前方向是水平方向, 该参数设置是列数. ② int orientation : 布局方向....当方向是 RecyclerView.VERTICAL 垂直方向时 , 网格元素排列顺序是逐行排列 , 先将第一行排满 , 然后将第二行排满 , int spanCount 参数设置是每行元素个数 ;...参数设置是每列元素个数 ; ( 古代人写字顺序 ) 构造函数原型 : /** * 创建瀑布流网格布局管理器 * * @param spanCount 如果当前方向是垂直方向...如果当前方向是水平方向, 该参数设置是列数. * @param orientation 布局方向.

1.3K00
领券