Маржа между элементами просмотра recycler Android

Привет, я следую этому руководству

http://www.journaldev.com/10024/androidrecyclerview-and-cardview-example-tutorial

Теперь я столкнулся с странной проблемой, разница между каждым элементом карты в обзоре recycler слишком велика.

ВОПРОС

Как уменьшить маржу между каждым элементом карты, размещенным внутри вида ресайклера.

Введите описание изображения здесь

Solutions Collecting From Web of "Маржа между элементами просмотра recycler Android"

Я столкнулся с аналогичной проблемой, с RelativeLayout в качестве корневого элемента для каждой строки в recyclerview.

Чтобы решить эту проблему, найдите файл xml, который содержит каждую строку, и убедитесь, что высота корневого элемента – wrap_content NOT match_parent .

  1. Найдите атрибут card_view:cardUseCompatPadding="true" в card_layout.xml и удалите его. Запустите приложение, и вы обнаружите, что между каждым элементом карты нет поля.

  2. Добавьте атрибуты полей, которые вам нравятся. Пример:

     android:layout_marginTop="5dp" android:layout_marginBottom="5dp" 

Я создал класс для решения этой проблемы. Этот класс устанавливает разные поля для элементов внутри recyclerView: только первая строка будет иметь верхнее поле, и только первый столбец будет иметь левый край.

 public class RecyclerViewMargin extends RecyclerView.ItemDecoration { private final int columns; private int margin; /** * constructor * @param margin desirable margin size in px between the views in the recyclerView * @param columns number of columns of the RecyclerView */ public RecyclerViewMargin(@IntRange(from=0)int margin ,@IntRange(from=0) int columns ) { this.margin = margin; this.columns=columns; } /** * Set different margins for the items inside the recyclerView: no top margin for the first row * and no left margin for the first column. */ @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { int position = parent.getChildLayoutPosition(view); //set right margin to all outRect.right = margin; //set bottom margin to all outRect.bottom = margin; //we only add top margin to the first row if (position <columns) { outRect.top = margin; } //add left margin only to the first column if(position%columns==0){ outRect.left = margin; } } 

}

Вы можете установить его в своем recyclerview таким образом

  RecyclerViewMargin decoration = new RecyclerViewMargin(itemMargin, numColumns); recyclerView.addItemDecoration(decoration); 

Вместо того, чтобы использовать XML для добавления поля между элементами в RecyclerView, лучше использовать RecyclerView.ItemDecoration, предоставляемые инфраструктурой Android.

Итак, я создаю библиотеку для решения этой проблемы.

https://github.com/TheKhaeng/recycler-view-margin-decoration

Введите описание изображения здесь

Попробуйте добавить RecyclerView.ItemDecoration

Чтобы узнать, как это сделать: как добавить разделители и пробелы между элементами в RecyclerView?

Изменение в представлении Recycler match_parent для wrap_content :

 <android.support.v7.widget.RecyclerView android:id="@+id/recycleView" android:layout_width="match_parent" android:layout_height="wrap_content" /> 

Также измените расположение элементов xml

Сделать родительский макет высотой match_parent для wrap_content

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

Если вы хотите сделать это в XML , jus set paddingTop и paddingLeft для вашего RecyclerView и равного количества layoutMarginBottom и layoutMarginRight для элемента, который вы надуваете в свой RecyclerView (или наоборот).