#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:
Добавьте 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. Можно ли посмотреть ваш исходный код?