Вид Recycler (горизонтальный) с двумя элементами 50% ширины родительского элемента - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу убедиться, что в режиме рециркуляции ( горизонтальная ориентация и LinearLayoutManager набор), что если у меня есть 2 элемента для отображения, они оба получают 50% от родительского макета. Таким образом, оба помещаются на экране.
Я пробовал 2 подхода, но ни один из них не работает должным образом.
Подход 1:

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)
 }  

Это не работает, если я сначала не прокручиваю, а затем только первый элемент его ширина адаптирована.

Подход 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.layoutParams.width = getScreenWidthFromUtils(context).x_width - MAGIC_NUMBER_WHICH_TAKES_PADDING_INTO_ACCOUNT)* 0.5).toInt()
       return ViewHolder(itemView)
 }  

Подход 2 вида работ, но, очевидно, это не может быть решением, так как я сомневаюсь, что это должно быть настолько сложно, чтобы достичь этого.

Как правильно это сделать?

1 Ответ

0 голосов
/ 29 апреля 2020

GridLayoutManager позаботится о том, чтобы ваш элемент имел оптимальный размер и место для номера столбца, который вы указали. В вашем случае вы хотите иметь 2 элемента в строке, поэтому ваш код должен выглядеть так:

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