#android #android-layout #android-recyclerview
#Android #android-макет #android-recyclerview
Вопрос:
Я сталкиваюсь со странным поведением с элементами просмотра ресайклера. Предполагается, что текстовые представления соответствуют родительским, но когда я запускаю его, я получаю следующее
Как вы можете видеть, все элементы усекаются, хотя его родительский элемент (внешний синий прямоугольник) соответствует родительскому элементу, как видно.
Если я прокручиваю вниз или вверх, то элементы занимают место, как и ожидалось. Смотрите Первый элемент, ниже которого я прокручивал его вверх и вниз:
Забавно, что после последнего изображения выше, если я открою резервную копию клавиатуры (или скрою), все элементы будут усечены до первого изображения.
Что-то между представлением recycler, клавиатурой и диалогом, в котором все это происходит, вызывает проблемы
Родительский:
<LinearLayout
android:id="@ id/llSearch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
.
.
.
.
<androidx.recyclerview.widget.RecyclerView
android:id="@ id/rvLocSearch"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginTop="8dp" />
</LinearLayout>
Элемент:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/main_light_grey"
android:paddingTop="5dp"
android:paddingBottom="5dp">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
/>
<TextView
android:id="@ id/tvLine1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="line 1"
android:textStyle="bold"
android:textColor="@color/White"
android:textSize="@dimen/_16ssp" />
<TextView
android:id="@ id/tvLine2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="line 2"
android:textStyle="bold"
android:textColor="@color/White"
android:textSize="@dimen/_16ssp" />
<TextView
android:id="@ id/tvDistance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="# km"
android:textColor="@color/White"
android:textSize="@dimen/_12ssp"
app:layout_constraintStart_toStartOf="@ id/ivIcon"
app:layout_constraintTop_toBottomOf="@ id/ivIcon" />
</LinearLayout>
Комментарии:
1. Для проблемы с клавиатурой, возможно
android:configChanges="keyboardHidden|screenSize|keyboard"
, в манифесте, раздел activity может иметь смысл2. Спасибо. Я попробовал. Не повезло
3. Ширина tvDistance равна wrap_content, плюс что такое ivIcon? Можете ли вы отправить нам соответствующее изображение, например, я вижу текст как «строка 2», но нигде на картинке я не вижу надписи «строка 2». Будет легко сравнить и определить, в чем проблема
4. Проблема не в tvDistance. Обрабатываются tvLine1 и tvLine2
Ответ №1:
Вам необходимо сохранить ширину tvDistance как родительскую, как и у других виджетов.
Замените эту строку
android:id="@ id/tvDistance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
с этим
android:id="@ id/tvDistance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
Комментарии:
1. tvLine1 является родителем соответствия. Установка расстояния для соответствия родительскому или переносному содержимому должна иметь эффект
2. Да, он будет иметь. Попробуйте изменить и проверить результаты.