web-dev-qa-db-ja.com

リサイクラービューのアイテムを中央に配置する方法は?

このモックアップのように各要素を中央に配置する必要があります。見ずにそのように機能するレイアウトがあるかどうかを検索しました。アイテムは行の中央に配置されます。

mockup

これは私のコードでどのように見えるかです。enter image description here

43
Cristian Gomez

LinearLayoutのアイテム行レイアウトでRecyclerViewを取得し、LinearLayoutAndroid:layout_gravity="center"を指定します。

画像の行ごとに、異なるLinearLayoutを使用する必要があります。

コードの例を次に示します。

 <LinearLayout
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content"
         Android:layout_gravity="center"
         Android:orientation="horizontal">

            <ImageView
                Android:id="@+id/image1"
                Android:layout_width="64dp"
                Android:layout_height="64dp"
                Android:layout_marginRight="10dp"
                Android:layout_weight="1"
                Android:src="@drawable/image1" />

            <ImageView
                Android:id="@+id/image2"
                Android:layout_width="64dp"
                Android:layout_height="64dp"
                Android:layout_marginLeft="10dp"
                Android:layout_marginRight="10dp"
                Android:layout_weight="1"
                Android:src="@drawable/image2" />

           <ImageView
                Android:id="@+id/image3"
                Android:layout_width="64dp"
                Android:layout_height="64dp"
                Android:layout_marginLeft="10dp"
                Android:layout_marginRight="10dp"
                Android:layout_weight="1"
                Android:src="@drawable/image3" />

  </LinearLayout>
31
Rajesh

Recyclerviewをwidthからwrap_contentとそのコンテナのlayout_gravityからcenter_horizontalに変更します

 <LinearLayout
      Android:layout_width="match_parent"
      Android:layout_height="wrap_content"
      Android:orientation="vertical">

      <Android.support.v7.widget.RecyclerView
           Android:id="@+id/recycrer_view"
           Android:layout_width="wrap_content"
           Android:layout_height="wrap_content"
           Android:layout_gravity="center_horizontal"
           Android:paddingLeft="16dp"
           Android:paddingRight="16dp" />
 </LinearLayout>
40
Ravi Yadav

LinearLayoutManagerスタイルの効果のためにRecyclerViewとともにListViewを使用していると仮定しています。その場合、各行にhorizontalLinearLayoutを使用し、Android:gravity="center"を使用してコンテンツを中央揃えにします。

8
CommonsWare

次のように、いくつかのレイアウトを動的に追加できます。

  • アダプターオブジェクトは水平LinearLayoutにすることができます

1- JavaコードでLinearLayoutを作成し、カスタマイズします(重力、...)

2- linearLayoutにいくつかのアイコンを追加

3-アダプタにlinearLayoutを追加します

4-リピート1,2,3


    // : declare new horizontal linearLayout
    ImageView myIcons[nomOfIcons];
    // : add all icons to myIcons
    for(int i=1; i<=nomOfIcons; i++){
        linearLayout.addView(myIcons[i - 1]);
        if(i%numOfIconsInOneHorizontalLinearLayout==0) {
            results.add(linearLayout); // add linearLayout to adapter dataSet
            // : declare new horizontal linearLayout
        }
    }
    if(n%numOfIconsInOneHorizontalLinearLayout!=0) // add last linearLayout if not added in the loop
        results.add(linearLayout);
    mAdapter.notifyDataSetChanged(); // update adapter

3
Misagh

com.google.Android:flexboxライブラリのFlexboxLayoutを使用します。 flexwrapおよびjustifyContentプロパティ値に注意してください。次に、前にアイテムの行をラップするビューにlayout_wrapBefore = trueを設定します。

    <com.google.Android.flexbox.FlexboxLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        app:flexWrap="wrap"
        app:justifyContent="center">

        <View ... />

        <View app:layout_wrapBefore="true" ... />

        <View ... />

    </com.google.Android.flexbox.FlexboxLayout>
3
ersin-ertan

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つのアイテムを連続して表示する場合に機能します。

グリッドレイアウトマネージャーのスパンカウントを必要に応じて変更します。

2
Rahul Devanavar

googleの新しいlayoutManagerを使用できます FlexLayoutManager これにより、recyclerViewアイテムに対する多くの制御と柔軟性が得られます。

1
Omar Abdan