Вертикальный просмотр вторсырья Android с горизонтальным переполнением

#android #android-recyclerview

Вопрос:

Я пытаюсь реализовать дерево документов с помощью RecyclerView. Поскольку дерево можно расширять, я использую для него пользовательский адаптер. Все элементы макета в окне просмотра вторсырья имеют ширину WRAP_CONTENT, а также само окно просмотра вторсырья. Поскольку метки в элементах могут быть длинными и вложенными, я хочу, чтобы список можно было прокручивать по горизонтали, чтобы видеть обрезанные элементы, а ориентация списка была вертикальной. Прокомментируйте, если вам нужно что-нибудь еще.

branch.xml

 lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="wrap_content"  android:orientation="vertical"  android:gravity="center"  android:layout_height="wrap_content"  xmlns:app="http://schemas.android.com/apk/res-auto"gt;   lt;TextView  android:padding="10dp"  android:id="@ id/title"  android:gravity="center"  android:textStyle="bold"  app:layout_constraintTop_toTopOf="parent"  android:layout_width="wrap_content"  android:layout_height="wrap_content" /gt;   lt;ImageView  android:id="@ id/arrow"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:src="@drawable/ic_baseline_keyboard_arrow_down_24"/gt;  lt;/LinearLayoutgt;   

Активность

 lt;HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:fillViewport="true"  tools:context=".TreeActivity"gt;   lt;androidx.recyclerview.widget.RecyclerView  android:id="@ id/list"  android:layout_width="wrap_content"  android:layout_height="match_parent" /gt;  lt;/HorizontalScrollViewgt;   

Привязка представления(адаптер управляется отдельно)

 class BranchViewHolder(val branchBinding: BranchBinding) : TreeViewBinder.ViewHolder(branchBinding.root)   override fun getLayoutId(): Int = R.layout.branch  override fun provideViewHolder(itemView: View?): BranchViewHolder = BranchViewHolder(BranchBinding.bind(itemView!!))   override fun bindView(p0: BranchViewHolder?, p1: Int, p2: TreeNodelt;*gt;?) {  Log.i(TAG, "bindView: ${p2?.isExpand}")  val rotateDegree = if (p2?.isExpand == true) -90 else 0  p0?.branchBinding?.arrow?.rotation = rotateDegree.toFloat()   with(p2?.content as Branch) {  p0?.branchBinding?.title?.text = this.name   p0?.itemView?.layoutParams= RecyclerView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)  }  }  

Screenshot

Изображение № 1

Проблема — Требуется горизонтальная прокрутка

Проблема - Требуется горизонтальная прокрутка

Ответ №1:

Добавьте app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" к своему RecyclerView .

Например, если вы хотите прокрутить элементы по горизонтали, попробуйте сделать это :

 lt;androidx.recyclerview.widget.RecyclerView  android:id="@ id/recyclerView"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:orientation="horizontal"  app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/gt;  

Не забудьте добавить orientation для вертикальной / горизонтальной прокрутки.

Комментарии:

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

Ответ №2:

Главное, что нужно добавить android:maxLines="1" в свой TextView.

 lt;?xml version="1.0" encoding="utf-8"?gt; lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:orientation="vertical"  android:gravity="center"  android:layout_height="wrap_content"  xmlns:app="http://schemas.android.com/apk/res-auto"gt;   lt;TextView  android:padding="10dp"  android:id="@ id/title"  android:gravity="center"  android:textStyle="bold"  app:layout_constraintTop_toTopOf="parent"  android:maxLines="1"  android:layout_width="wrap_content"  android:layout_height="wrap_content" /gt;   lt;ImageView  android:id="@ id/arrow"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:src="@drawable/ic_baseline_keyboard_arrow_down_24"/gt; lt;/LinearLayoutgt;  

Обновите свой recyclerview, как показано ниже

 lt;HorizontalScrollView  android:layout_width="match_parent"  android:layout_height="match_parent"gt;  lt;androidx.recyclerview.widget.RecyclerView  android:id="@ id/list"  app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"  tools:listitem="@layout/item"  android:layout_width="match_parent"  android:layout_height="match_parent" /gt;  lt;/HorizontalScrollViewgt;  

Комментарии:

1. Мне не нужны отдельные свитки на всех предметах. Я хочу прокрутить весь обзор вторсырья.

2. @Абдуллахзхан, отредактированный код выше, он должен работать.

3. Теперь он просто обрезается. Почему вы поместили родителя соответствия на ширину линейного макета?

4. Чтобы у всех детей-переработчиков был один размер. Все они будут такими же длинными, как самый длинный ребенок.

5. Можно ли посмотреть ваш исходный код?