RecyclerView LinearLayout всегда появляется поверх других элементов - PullRequest
0 голосов
/ 02 января 2019

У меня есть этот экран с именем Messages, который отображает список последних сообщений пользователю.В моем файле activity_messages.xml у меня есть этот бит кода:

<View
    android:id="@+id/horizontal_line"
    android:layout_width="351dp"
    android:layout_height="1dp"
    android:layout_marginStart="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginBottom="8dp"
    android:background="@android:color/black"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.47"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/Game_Button"
    app:layout_constraintVertical_bias="0.216" />

По сути, этот блок кода создает горизонтальную линию.Ниже этой горизонтали я хочу отобразить последние сообщения пользователя.

Ниже этого горизонтального блока кода у меня есть этот код:

<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:layout_editor_absoluteX="64dp"
    tools:layout_editor_absoluteY="168dp">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical">
    </android.support.v7.widget.RecyclerView>
</android.support.v4.widget.NestedScrollView>

Это обеспечивает отображение последних сообщений пользователя..

Теперь в моем файле Messages.java есть этот бит кода:

mMessagesLayoutManager = new LinearLayoutManager(Messages.this);
mRecyclerView.setLayoutManager(mMessagesLayoutManager);
mMessagesAdapter = new MessagesAdapter(getDataSetMessages(), Messages.this);
mRecyclerView.setAdapter(mMessagesAdapter);

for(int i = 0; i < 100; i++) {
    MessagesObject obj = new MessagesObject(Integer.toString(i));
    resultsMessages.add(obj);
}
mMessagesAdapter.notifyDataSetChanged();

Этот код предназначен для тестирования, но он работает.Он показывает все сообщения пользователя в линейном порядке, и я могу просматривать их.Моя единственная проблема - когда я запускаю программу, последние сообщения не начинаются ниже горизонтальной линии.Некоторые сообщения находятся над горизонтальной линией и поверх других элементов.Я думаю, что первое сообщение переходит на позицию (0,0).

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

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Можно либо обернуть оба вида первого вида и вид прокрутки в LinearLayout с помощью android: Ориентация = "вертикальный", либо добавить ограничения (если корневым видом является ConstraintLayout)

0 голосов
/ 02 января 2019

Измените это:

<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:layout_editor_absoluteX="64dp"
    tools:layout_editor_absoluteY="168dp">

вместо этого:

<android.support.v4.widget.NestedScrollView
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintTop_toBottomOf="@+id/horizontal_line"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintBottom_toBottomOf="parent">

Здесь происходит два основных изменения:

  • ConstraintLayout не полностью поддерживает match_parent, поэтому вместо этого мы используем 0dp (что означает «соответствие ограничениям»).
  • Добавьте ограничения для всех четырех сторон.Ограничения начала / конца заставляют представление заполнять экран горизонтально, а ограничения сверху / снизу заставляют представление заполнять все, начиная от линии и до нижней части экрана.
0 голосов
/ 02 января 2019

это просто проблема сдерживания. Вы не установили ограничение для повторного просмотра. Попробуйте добавить ограничение и запустить снова. это будет работать

...