Горизонтальный вид рециркулятора обрезает текст, поскольку он сохраняет одинаковую высоту для всех элементов списка - PullRequest
0 голосов
/ 16 ноября 2018

При использовании представления рециркулятора с LinearLayoutManager.HORIZONTAL и высотой как wrap_content он пытается сохранить элементы списка одинаковой высоты?Кажется, что это так, и какой-то текст обрезается.Как я могу решить это?
Это макет для элемента

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@drawable/boundaries"
    android:paddingTop="16dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:layout_marginEnd="16dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="16dp"
        android:layout_height="16dp"
        android:orientation="vertical"
        android:gravity="center"
        >

        <ImageView
            android:layout_width="16dp"
            android:layout_height="16dp"
            android:layout_gravity="center"
            android:scaleType="fitCenter"
            android:gravity="center"
            android:src="@drawable/my_icon”
            />


    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:layout_marginStart="12dp"
            android:layout_marginEnd="16dp"
            android:layout_marginBottom="16dp"
            android:maxWidth="200sp"
            android:text="Some text of various length"
            />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:includeFontPadding="false"
            android:layout_marginStart="12dp"
            android:layout_marginBottom="16dp"
            android:gravity="bottom"
            android:text="Some text that is not more than a line"
            />
    </LinearLayout>

</LinearLayout>

1 Ответ

0 голосов
/ 16 ноября 2018

RecyclerView сохраняет ту же высоту по умолчанию. В качестве высоты во время рендеринга используется максимальная высота от видимых макетов вида элемента. Таким образом, это вызывает проблему обрезки текста, поскольку может быть элемент с большим содержанием, чем видимые элементы.

По моему мнению, создавать собственный менеджер макета совсем не нужно, как этот парень сделал . Что касается производительности и удобства использования, я думаю, что лучше всего угадать максимальную высоту вашего вида элемента и установить ее в качестве высоты RecyclerView в виде константы, как в размере dp.

Если вы действительно хотите установить правильную высоту, вам нужно написать некоторый код Java, чтобы оценить фактическую высоту просмотров элементов. RecyclerView должен иметь собственную высоту, и это определяется во время рендеринга. И содержимое динамическое. Поэтому вам нужно написать некоторый код, чтобы оценить все ваши представления элементов и найти максимальную высоту, которая будет установлена ​​как высота RecyclerView в java-коде.

...