Раздутие макета в recyclerview по горизонтали и вертикали, FlexboxLayout с представлением recycler add view по горизонтали автоматически по вертикали

У меня есть макет, который раздувается в действии. Теперь вся информация отображается вертикально, как показано ниже. вот как это выглядит сейчас

но я хочу, чтобы три textView располагались горизонтально, а затем следующие три должны были появиться в следующей строке и так далее. Я выложил так, как должно выглядеть снизу.вот как я хочу, чтобы это выглядело

это макет с recyclerview

<android.support.v7.widget.RecyclerView
        android:id = "@+id/rv_my_groups"
        android:layout_width = "match_parent"
        android:layout_height = "300dp"
        android:layout_marginBottom = "16dp"
        android:layout_marginEnd = "16dp"
        app:reverseLayout = "true"
        android:layout_marginStart = "16dp"
        android:layout_marginTop = "16dp"
        android:visibility = "gone"
        android:onClick = "onOutsideClick"
        android:orientation = "vertical"
        app:layoutManager = "android.support.v7.widget.StaggeredGridLayoutManager"
        app:layout_constraintTop_toBottomOf = "@id/rv_selected_groups" />

а внизу - отдельный макет с textView, который я использую для надувания.

<TextView xmlns:android = "http://schemas.android.com/apk/res/android"
         android:id = "@+id/tv_group_name"
         android:layout_width = "wrap_content"
         android:layout_height = "wrap_content"
         android:layout_gravity = "center"
         android:layout_margin = "8dp"
         android:background = "@drawable/chip_drawable"
         android:fontFamily = "sans-serif-condensed"
         android:gravity = "center"
         android:textAllCaps = "false"
         android:textColor = "@android:color/black"
         android:textSize = "14sp" />

и активность котлина, где я раздул макет

 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GroupsViewHolder {
    val view = LayoutInflater.from(parent.context).inflate(R.layout.groups_item_row, parent, false)

    return GroupsViewHolder(view)
}

извините, если моего кода недостаточно.

Требуемый вывод Есть ли способ реализовать это Раздутие макета в recyclerview по горизонтали и вертикали, FlexboxLayout с представлением recycler add view по горизонтали автоматически по вертикали

4
0
1 513
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я бы рекомендовал использовать для этого FlexBox от Google. Он автоматически разместит элементы по размеру экрана любым способом, который вы укажете.

Ответ принят как подходящий

вот полный пример

Шаг 1: добавить реализацию com.google.android:flexbox:1.1.0 в build.gradle

Обратите внимание, что начиная с версии 1.1.0 ожидается, что библиотека будет использоваться с AndroidX. Пожалуйста, перейдите на AndroidX, если вы используете 1.1.0 или выше.

Пожалуйста, используйте 1.0.0, если вы еще не перешли на AndroidX.

Шаг 2: Activity.xml

<com.google.android.flexbox.FlexboxLayout
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    app:flexDirection = "row_reverse"
    app:justifyContent = "center"
    app:alignItems = "center"
    app:flexWrap = "wrap">

    <TextView
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "5dp"
        android:padding = "5dp"
        android:background = "@drawable/flexbox_item_background"
        android:text = "Android"/>

    <TextView
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "5dp"
        android:padding = "5dp"
        android:background = "@drawable/flexbox_item_background"
        android:text = "iOS"/>

    <TextView
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "5dp"
        android:padding = "5dp"
        android:background = "@drawable/flexbox_item_background"
        android:text = "Windows"/>

    <TextView
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "5dp"
        android:padding = "5dp"
        android:background = "@drawable/flexbox_item_background"
        android:text = "Linux"/>

    <TextView
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "5dp"
        android:padding = "5dp"
        android:background = "@drawable/flexbox_item_background"
        android:text = "Unix"/>

    <TextView
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "5dp"
        android:padding = "5dp"
        android:background = "@drawable/flexbox_item_background"
        android:text = "MaxOS"/>

    <TextView
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "5dp"
        android:padding = "5dp"
        android:background = "@drawable/flexbox_item_background"
        android:text = "Java"/>

    <TextView
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "5dp"
        android:padding = "5dp"
        android:background = "@drawable/flexbox_item_background"
        android:text = "C++"/>

    <TextView
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "5dp"
        android:padding = "5dp"
        android:background = "@drawable/flexbox_item_background"
        android:text = "Python"/>

    <TextView
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "5dp"
        android:padding = "5dp"
        android:background = "@drawable/flexbox_item_background"
        android:text = "Kotlin"/>

    <TextView
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "5dp"
        android:padding = "5dp"
        android:background = "@drawable/flexbox_item_background"
        android:text = "Hadoop"/>

    <TextView
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "5dp"
        android:padding = "5dp"
        android:background = "@drawable/flexbox_item_background"
        android:text = "Solr"/>

    <TextView
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "5dp"
        android:padding = "5dp"
        android:background = "@drawable/flexbox_item_background"
        android:text = "Lucene"/>

</com.google.android.flexbox.FlexboxLayout>

Шаг 3 flexbox_item_background.xml

<shape xmlns:android = "http://schemas.android.com/apk/res/android"
    android:shape = "rectangle">

    <solid android:color = "@android:color/holo_green_light" />

    <corners android:radius = "5sp"/>

</shape>

Выход:

Шаг 3 FlexboxLayout с recyclerview

RecyclerView recyclerView = (RecyclerView) 
context.findViewById(R.id.recyclerview);
FlexboxLayoutManager layoutManager = new FlexboxLayoutManager(context);
recyclerView.setLayoutManager(layoutManager);

братан, надеюсь, это сработает, но знаете ли вы, как это реализовать в котлине.

Siva perumal 02.11.2018 07:15

Вы сталкиваетесь с какой-либо конкретной проблемой с kotlin, у него очень меньше java-кода, если вы вставите этот код в студию Android, он автоматически преобразует код в kotlin, если вы скопируете его в файл kotlin.

aanshu 02.11.2018 08:40

он показывает несоответствие типов, когда я копирую этот код и вставляю этот код после его преобразования в kotlin. как требуется, это RecyclerView.LayoutManager, но обнаружил FlexboxLayoutManager в layoutManager, переданном в setLayoutManager ()

Siva perumal 02.11.2018 08:42

Можете поделиться снимком?

aanshu 02.11.2018 08:47

как поделиться здесь, я должен опубликовать это в своем вопросе или есть другой способ

Siva perumal 02.11.2018 08:56

снимок экрана находится по этой ссылке drive.google.com/open?id=1LOoxOhXSoZgExgxrniC0FvMBl0rkAAxe

Siva perumal 02.11.2018 09:29

Я думаю, это потому, что вы упомянули gridlayouanager как менеджер компоновки RV.

aanshu 02.11.2018 09:39

так что мне теперь делать

Siva perumal 02.11.2018 09:43

Если вы нашли это полезным, не забудьте обновить и пометить как ответ

aanshu 02.11.2018 09:47

Я прокомментировал предыдущий код и попытался, но ошибка говорит о несоответствии типов

Siva perumal 02.11.2018 10:12

нашел ошибку, использовал неправильную зависимость. Теперь это работает. Спасибо братан за вашу помощь

Siva perumal 02.11.2018 18:52

Другие вопросы по теме