こんにちは私はこのチュートリアルに従っています
http://www.journaldev.com/10024/Android-recyclerview-and-cardview-example-tutorial
今、私は奇妙な問題に直面しています。リサイクラービュー内の各カードビューアイテム間のマージンが大きすぎます。
発行
リサイクラビュー内に配置されたカードビューの各アイテム間のマージンを減らす方法。
Recyclerviewの各行のルート要素としてRelativeLayoutを使用して、同様の問題に直面しました。
この問題を解決するには、各行を保持するxmlファイルを見つけて、ルート要素の高さがwrap_content
NOT match_parent
であることを確認します。
この問題を管理するクラスを作成しました。このクラスは、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);
cards_layout.xmlで属性card_view:cardUseCompatPadding="true"
を見つけて削除します。アプリを起動すると、各カードビュー項目の間に余白がないことがわかります。
お好みのマージン属性を追加します。例:
Android:layout_marginTop="5dp"
Android:layout_marginBottom="5dp"
XMLを使用してRecyclerViewのアイテム間にマージンを追加する代わりに、Androidフレームワークによって提供されるRecyclerView.ItemDecorationを使用することをお勧めします。
そこで、この問題を解決するライブラリを作成します。
https://github.com/TheKhaeng/recycler-view-margin-decoration
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">
CardViewアイテムでCompatPaddingを使用する
XMLで実行する場合は、paddingTop
とpaddingLeft
をRecyclerView
に設定し、同じ量のlayoutMarginBottom
とlayoutMarginRight
をRecyclerView
にインフレーションするアイテムに設定します(またはその逆)。
リサイクルビューの変更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"
/>
追加してみてください RecyclerView.ItemDecoration
それを行う方法を知るには: RecyclerViewでアイテム間に仕切りとスペースを追加する方法