Маржа между элементами в просмотре recycler Android
Привет, я следую этому руководству
http://www.journaldev.com/10024/android-recyclerview-and-cardview-example-tutorial
Теперь я столкнулся с какой-то странной проблемой: разница между каждым элементом карты в обзоре recycler слишком велика.
ВОПРОС
Как уменьшить маржу между каждым элементом карты, помещенным внутри вида recycler.
![введите описание изображения здесь]()
Ответы
Ответ 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
Ответ 7
Попробуйте добавить RecyclerView.ItemDecoration
Чтобы узнать, как это сделать: Как добавить разделители и пробелы между элементами в RecyclerView?
Ответ 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
(или наоборот).