web-dev-qa-db-ja.com

リサイクラビューのアイテム間のマージンAndroid

こんにちは私はこのチュートリアルに従っています

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

今、私は奇妙な問題に直面しています。リサイクラービュー内の各カードビューアイテム間のマージンが大きすぎます。

発行

リサイクラビュー内に配置されたカードビューの各アイテム間のマージンを減らす方法。

enter image description here

41
Tushar Narang

Recyclerviewの各行のルート要素としてRelativeLayoutを使用して、同様の問題に直面しました。

この問題を解決するには、各行を保持するxmlファイルを見つけて、ルート要素の高さがwrap_content NOT match_parentであることを確認します。

83
Maher Nabil

この問題を管理するクラスを作成しました。このクラスは、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);
33
Victor
  1. cards_layout.xmlで属性card_view:cardUseCompatPadding="true"を見つけて削除します。アプリを起動すると、各カードビュー項目の間に余白がないことがわかります。

  2. お好みのマージン属性を追加します。例:

    Android:layout_marginTop="5dp"
    Android:layout_marginBottom="5dp" 
    
28
Jing

XMLを使用してRecyclerViewのアイテム間にマージンを追加する代わりに、Androidフレームワークによって提供されるRecyclerView.ItemDecorationを使用することをお勧めします。

そこで、この問題を解決するライブラリを作成します。

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

enter image description here

4
The Khaeng

RecyclerviewアイテムレイアウトでCardViewを使用するには、次のようにします。

 <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">
2

CardViewアイテムでCompatPaddingを使用する

2

XMLで実行する場合は、paddingToppaddingLeftRecyclerViewに設定し、同じ量のlayoutMarginBottomlayoutMarginRightRecyclerViewにインフレーションするアイテムに設定します(またはその逆)。

1
Vlad

リサイクルビューの変更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 to 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"
    />
0
mohit

追加してみてください RecyclerView.ItemDecoration

それを行う方法を知るには: RecyclerViewでアイテム間に仕切りとスペースを追加する方法

0
Tarek360