RecyclerView
の各行のすべてのアイテムを水平方向に中央揃えしようとしています
私は多くのことを試しました:RelativeLayoutを親として使用し、次にlayout_centerInParentを使用し、基本的なAndroid:layout_gravity = "center"を使用し、重みを使用してスペース要素を追加してみてください.... in item_row.xml
しかし、私は成功しませんでした:(
私が持っているもの
欲しいもの
活動中
recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
item_row.xml
<Android.support.v7.widget.CardView xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:card_view="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/cardView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
card_view:cardCornerRadius="2dp"
card_view:cardElevation="4dp"
card_view:cardUseCompatPadding="true">
<!-- Recycler View Item Row -->
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical">
<ImageView
Android:id="@+id/imgThumbnail"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:adjustViewBounds="true"
Android:background="@Android:color/black" />
<LinearLayout
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<TextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceMedium"
Android:text="item name"
Android:id="@+id/txtName"
Android:layout_margin="5dp"
Android:singleLine="false"
Android:lines="2"
Android:gravity="center" />
<LinearLayout
Android:orientation="horizontal"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<TextView
Android:layout_width="0dp"
Android:layout_height="match_parent"
Android:textAppearance="?android:attr/textAppearanceSmall"
Android:id="@+id/txtCategory"
Android:textStyle="italic"
Android:textColor="#496fa9"
Android:text="subtitle"
Android:layout_weight="1"
Android:gravity="center_vertical"
Android:paddingLeft="10dp"
Android:layout_gravity="center" />
<ImageButton
Android:id="@+id/imageButton"
Android:layout_width="48dp"
Android:layout_height="wrap_content"
Android:background="@Android:color/black"
Android:adjustViewBounds="true"
Android:scaleType="fitCenter"
Android:padding="8dp"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</Android.support.v7.widget.CardView>
私はたくさんグーグルでこれを見つけました answer しかし実際には、アイテムの各行に対してLinearLayout
を作成する方法がわかりません!
それが最善の解決策ですか?
他のアイデアはありますか?
spanSizeLookupを使用して、グリッドビューの幅が異なるビュー/アイテムを作成できます。そのため、空のビューで巧妙に調整して、それに応じて調整することができます。レイアウトが実際にどの程度可変であるかに応じて、より複雑または単純になる可能性があります。
図面に表示するこの特定のケースでは、次のようにします。
_GridLayoutManager lm = new GridLayoutManager(context, 6);
lm.setSpanSizeLookup(new MySizeLookup());
public static class MySizeLookup extends SpanSizeLookup {
public int getSpanSize(int position) {
if(position >= 0 && position <= 2) {
return 2;
} else if (position == 3 || position == 6) {
return 1;
} else {
return 2;
}
}
}
_
これで、アダプターで位置3と6を空/非表示の要素にする必要があります。その余分なスペースを占有するためのnew View(context);
のようなもの
gridLayoutManager = new GridLayoutManager(context,6)
を使用し、setSpanSizeLookup
をオーバーライドします。
例:
int totalSize=list.size();
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
int span;
span = totalSize % 3;
if (totalSize < 3) {
return 6;
} else if (span == 0 || (position <= ((totalSize - 1) - span))) {
return 2;
} else if (span == 1) {
return 6;
} else {
return 3;
}
}
});
これは、3つのアイテムを続けて表示し、グリッドの中央に残したい場合に機能します。
要件に応じて、グリッドレイアウトマネージャーのスパンカウントを変更します。