Подтвердить что ты не робот

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

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

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

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

ВОПРОС

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Я сделал класс, чтобы справиться с этой проблемой. Этот класс устанавливает разные поля для элементов внутри 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;
        }
    }
}

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

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

Ответ 3

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

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

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

Ответ 4

Используйте CardView в макете элемента Recyclerview следующим образом:

 <android.support.v7.widget.CardView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:card_view="http://schemas.android.com/tools"
        card_view:cardCornerRadius="10dp"
        app:cardBackgroundColor="#ACACAC"
        card_view:cardElevation="5dp"
        app:contentPadding="10dp"
        card_view:cardUseCompatPadding="true">

Ответ 5

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

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

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

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

Ответ 6

Используйте CompatPadding в элементе CardView

Ответ 8

изменение в представлении 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"
    />

Ответ 9

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