У меня есть макет, который раздувается в действии. Теперь вся информация отображается вертикально, как показано ниже. вот как это выглядит сейчас
но я хочу, чтобы три 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)
}
извините, если моего кода недостаточно.
Я бы рекомендовал использовать для этого 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);
Вы сталкиваетесь с какой-либо конкретной проблемой с kotlin, у него очень меньше java-кода, если вы вставите этот код в студию Android, он автоматически преобразует код в kotlin, если вы скопируете его в файл kotlin.
он показывает несоответствие типов, когда я копирую этот код и вставляю этот код после его преобразования в kotlin. как требуется, это RecyclerView.LayoutManager, но обнаружил FlexboxLayoutManager в layoutManager, переданном в setLayoutManager ()
Можете поделиться снимком?
как поделиться здесь, я должен опубликовать это в своем вопросе или есть другой способ
снимок экрана находится по этой ссылке drive.google.com/open?id=1LOoxOhXSoZgExgxrniC0FvMBl0rkAAxe
Я думаю, это потому, что вы упомянули gridlayouanager как менеджер компоновки RV.
так что мне теперь делать
Если вы нашли это полезным, не забудьте обновить и пометить как ответ
Я прокомментировал предыдущий код и попытался, но ошибка говорит о несоответствии типов
нашел ошибку, использовал неправильную зависимость. Теперь это работает. Спасибо братан за вашу помощь
братан, надеюсь, это сработает, но знаете ли вы, как это реализовать в котлине.