是否可以根据屏幕宽度使用gridLayoutManager调整recyclerview的行数和列数?

Posted

技术标签:

【中文标题】是否可以根据屏幕宽度使用gridLayoutManager调整recyclerview的行数和列数?【英文标题】:Is it possible to adjust the number of rows and columns of recyclerview using gridLayoutManager according to the screen width? 【发布时间】:2020-10-25 09:33:21 【问题描述】:

在开发 android 应用的过程中,发生了向用户显示项目列表的事情。如果你是竖着看手机,行数是没有限制的,但是如果你是横着看,你想创建一个可以根据宽度调整列数的功能。这是我目前使用的代码。

class MainActivity : AppCompatActivity() 
    var array: ArrayList<String>? = null
    
    override fun onCreate(savedInstanceState: Bundle?) 
        ...
        ...
        recyclerView.layoutManager = GirdLayoutManager(this, 2)
        recyclerView.setHasFixedSize(true)
        recyclerView.adapter = MyAdapter(array!!)
    

既然spanCount的值设置为2,当然我知道列数设置为2。我只是想要我要显示的itemView的宽度根据移动宽度。有什么解决办法吗?

如果你需要一个自定义的GridLayout 经理,你是怎么做到的?

【问题讨论】:

【参考方案1】:

您可以将整数资源文件添加到包含 spanCount 值的不同变体的 res/values 中,您希望针对不同的屏幕宽度进行更改。

右键单击 res/values > New > Values Resource File > 为文件选择一个名称 > 选择 Screen Width qualifier 并在 dp 中设置屏幕宽度值

然后加上一个整数值

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="span">2</integer>
</resources>

针对您希望跨度变化的不同屏幕宽度重复此操作。当然,创建与您未提及的任何其他屏幕宽度匹配的默认资源文件(未识别限定符)。

并构建 recyclerView span 获取该资源,它会根据屏幕宽度自动获取适当的资源值:

recyclerView.layoutManager = GirdLayoutManager(this, resources.getInteger(R.integer.span))

【讨论】:

以上是关于是否可以根据屏幕宽度使用gridLayoutManager调整recyclerview的行数和列数?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据屏幕宽度更改图像路径?

根据屏幕宽度修剪单词

如何根据视频的高度和宽度设置屏幕方向

CSS3 媒体查询 - 容器的宽度而不是屏幕的宽度?

使用WKWebView自适应屏幕遇到的问题以及最后解决的方法

是否可以为不同的 iPhone 屏幕设置宽度和高度?