GridLayoutManager 3 столбца в RecyclerView

Я пытаюсь сделать простой GridLayout с 3 столбцами, но, хотя я получаю 3 столбца, я получаю странный промежуток между строками. Итак, я получаю 3 изображения в строке, чем одна строка, которая пуста (которая, кажется, имеет высоту, совпадающую с высотой строки abov (которая имеет изображения), затем строка из 3 изображений, чем странный пробел ... и т. Д. Я ожидал, что не буду получить, чем пустой промежуток. Как удалить этот пустой промежуток? Попытка установить wrap_content на layout_height в режиме ресайклера, но фрагмент не помог. Это мой код:

    final GridLayoutManager layoutManager = new GridLayoutManager(this,3);
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setAdapter(adapter);

Это xml активности:

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.adriagate.adriagateonlineandroid.activities.ImagesActivity">


<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/fragmentImagesHeader"
    android:name="com.adriagate.adriagateonlineandroid.fragments.ImagesHeader"
    tools:layout="@layout/fragment_images_header" android:layout_width="match_parent"
    android:layout_height="match_parent" >
</fragment>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/fragmentImagesGrid"
    android:name="com.adriagate.adriagateonlineandroid.fragments.ImagesList"
    tools:layout="@layout/fragment_images_list" android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</fragment>
   </RelativeLayout>  

Обратите внимание, что в этом макете есть важный фрагмент, называемый fragmentImagesGrid, который имеет этот макет:

   <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.adriagate.adriagateonlineandroid.fragments.ImagesList">

    <android.support.v7.widget.RecyclerView
      android:id="@+id/recycler_view_images"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
     tools:listitem="@layout/recycler_view_images_one_row"
    >

</FrameLayout>

This i the layout of the one element inside recycler view:

   <?xml version="1.0" encoding="utf-8"?>
     <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:orientation="vertical"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
        xmlns:tools="http://schemas.android.com/tools"
      >

<ImageView
    android:id="@+id/imageViewImagesAllOneRow"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    tools:src="@drawable/slika_200_200"
    />

   </FrameLayout> 

Мне не нужен этот пустой пробел, который вы видите на этом изображении


person Vlado Pandžić    schedule 02.01.2016    source источник


Ответы (1)


Похоже, это происходит из-за того, что ваши изображения имеют разные размеры. Измените свой элемент на LinearLayout и установите для его макета высоту и ширину match_parent. Установите gravity = "center" (линейного макета). Другая проблема - android: layout_height = "wrap_content". RecyclerView не работает, когда вы устанавливаете свойство height на wrap_content. Если вы все еще хотите использовать RecyclerView с wrap_content, вы можете выбрать это решение.

person Georgy    schedule 02.01.2016