ImageViews в RecyclerView не "вес" выровнены по горизонтали - PullRequest
0 голосов
/ 02 мая 2020

Вот как это выглядит в окне предварительного просмотра и на устройстве.

Rows with different spacing

Код для макета строки и макета RecyclerView является базовым когда он получает

Row имеет один ImageView:

<androidx.constraintlayout.widget.ConstraintLayout
    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 = "175dp"
    android:layout_height = "175dp"
    android:layout_margin = "4dp">

    <ImageView
        android:id = "@+id/imageView"
        android:layout_width = "0dp"
        android:layout_height = "0dp"
        app:layout_constraintBottom_toBottomOf = "parent"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent"
        tools:ignore = "ContentDescription"
        tools:srcCompat = "@tools:sample/avatars" />
</androidx.constraintlayout.widget.ConstraintLayout>

RecyclerView (который является единственным представлением в этом фрагменте) представляет собой Grid с двумя промежутками:

    <androidx.recyclerview.widget.RecyclerView
        android:id = "@+id/recyclerView"
        android:layout_width = "0dp"
        android:layout_height = "0dp"
        app:layoutManager = "androidx.recyclerview.widget.GridLayoutManager"
        app:layout_constraintBottom_toBottomOf = "parent"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent"
        app:spanCount = "2"
        tools:listitem = "@layout/row_dir_observer_secondary" />

Я понятия не имею, что не так, пробовал все настройки макета, связанные с гравитацией, пробовал веса, но единственное, что сработало - это предоставление padding_start родителю.

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Когда вы используете GridLayoutManager в качестве LayoutManager в RecyclerView, не помещайте фиксированную ширину размера, потому что если вы хотите, чтобы каждый элемент RecyclerView имел одинаковую ширину, тогда GridLayoutManager автоматически делит ширину экрана в соответствии с SpanCout, если вы используйте ширину в качестве match_parent.

Поэтому сначала удалите жестко запрограммированное значение ширины из файла макета адаптера (пример здесь - 175dp) и установите значение match_parent width в файле макета Adpater.

Попробуйте это,

<androidx.constraintlayout.widget.ConstraintLayout
    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 = "175dp"
    android:layout_margin = "4dp">

    <ImageView
        android:id = "@+id/imageView"
        android:layout_width = "0dp"
        android:layout_height = "0dp"
        app:layout_constraintBottom_toBottomOf = "parent"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent"
        tools:ignore = "ContentDescription"
        tools:srcCompat = "@tools:sample/avatars" />
</androidx.constraintlayout.widget.ConstraintLayout>
1 голос
/ 02 мая 2020

Вы использовали жестко заданную ширину в адаптере, используйте match_parent, я думаю, что вы уже используете gridlayoutmanager с span = 2, поэтому не нужно ничего там менять.

...