Как сделать TextView максимальным количеством строк - если больше - прокручиваемым - PullRequest
1 голос
/ 06 июля 2019

У меня есть recyclerView, каждый itemView содержит следующее:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    app:cardCornerRadius="8dp"
    android:layout_marginBottom="4dp"
    android:layout_height="wrap_content">

    <LinearLayout
            android:orientation="vertical"
            android:layout_width="wrap_content"
            android:layout_weight="10"
            android:layout_height="wrap_content">

        <View
                android:id="@+id/divider"
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="?android:attr/listDivider"/>

        <ScrollView android:layout_width="match_parent"
                    android:layout_height="100sp">
            <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/answer"/>

        </ScrollView>
    </LinearLayout>

</android.support.v7.widget.CardView>

Используя этот файл kotlin, я сделал TextViews прокручиваемыми внутри RecyclerView (textView можно прокручивать, только если они не подходят к 100sp).

            itemView.answer.setOnTouchListener{v,event ->
            // Disallow the touch request for parent scroll on touch of child view
            v.parent.requestDisallowInterceptTouchEvent(true)
            false
        }

Тот же файл в формате Java:

            itemView.answer.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                // Disallow the touch request for parent scroll on touch of child view
                v.getParent().requestDisallowInterceptTouchEvent(true);
                return false;
            }
        });

Проблема в том, что тогда TextView содержит только 1 или 2 строки текста, внутри этого TextView много пустого пространства,Я хочу сделать что-то вроде этого: когда в TextView есть 1-5 строк текста, его высота равна просто «wrap_content» и не прокручивается.Но когда есть еще 6 строк текста, он умещается только в 5 строк, чтобы увидеть другие строки, которые пользователь должен прокрутить в TextView.

Как я могу это сделать?Снимок экрана текущего RecyclerView: enter image description here

1 Ответ

1 голос
/ 06 июля 2019

Вы никогда не должны включать прокручивающиеся виды внутри ваших ViewHolder s. Это приведет к непредсказуемому поведению, и конечные пользователи будут разочарованы, когда они попытаются прокрутить список и в конечном итоге прокрутят содержимое вашего ViewHolder. Лучшим способом сопоставления будет реализация расширяемых ViewHolder s, которые в свернутом состоянии показывают, например, 3 строки текста, и все они в развернутом состоянии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...