【问题标题】:Recycler view (horizontal) with two items 50% of the parent width具有父宽度 50% 的两个项目的回收站视图(水平)
【发布时间】:2020-04-28 15:05:21
【问题描述】:

我想确保在回收站视图(horizo​​ntal 方向和 LinearLayoutManager 设置)中,如果我有 2 个项目要显示,它们都会获得父布局的 50%。所以两者都适合屏幕。
我尝试了 2 种方法,但都不能正常工作。
方法一:

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomAdapter.ViewHolder {
        val inflater = LayoutInflater.from(parent.context)
        val itemView = inflater.inflate(R.layout.horizontal_list_item_view, parent, false)
        itemView.post(
            object : Runnable {
                override fun run() {
                    itemView.layoutParams.width = (parent.width * 0.5).toInt()
                }

            }

        )
        return ViewHolder(itemView)
 }  

除非我先滚动然后只有第一个项目的宽度调整了,否则这不起作用。

方法二:

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomAdapter.ViewHolder {
        val inflater = LayoutInflater.from(parent.context)
        val itemView = inflater.inflate(R.layout.horizontal_list_item_view, parent, false)
       itemView.layoutParams.width = getScreenWidthFromUtils(context).x_width - MAGIC_NUMBER_WHICH_TAKES_PADDING_INTO_ACCOUNT)* 0.5).toInt()
       return ViewHolder(itemView)
 }  

方法 2 种工作,但显然它不能成为解决方案,因为我怀疑它必须如此复杂才能实现这一点。

这样做的正确方法是什么?

【问题讨论】:

标签: android android-layout android-recyclerview


【解决方案1】:

GridLayoutManager 将根据您指定的列数为您的项目提供最佳大小和空间。在您的情况下,您希望每行有 2 个项目,因此您的代码应如下所示:

val gridLayoutManager = GridLayoutManager(context, 2, GridLayoutManager.HORIZONTAL, false)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多