web-dev-qa-db-de.com

Wie zentriere ich Elemente einer Recyclingübersicht?

Ich muss Elemente in jeder Zeile zentrieren, damit sie wie in diesem Modell aussehen. Ich habe gesucht, ob es ein Layout gibt, das so funktioniert, ohne es anzusehen. Elemente werden in ihren Zeilen zentriert.

mockup

So sieht es jetzt in meinem Code aus.enter image description here

43
Cristian Gomez

Nehmen Sie LinearLayout in das Zeilenlayout Ihres RecyclerView und geben Sie Android:layout_gravity="center" bis LinearLayout.

Für jede Bildreihe muss ein anderes LinearLayout verwendet werden.

Hier ist ein Beispielcode:

 <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

Mache recyclerview width zu wrap_content Und dessen Container layout_gravity Zu 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

Ich gehe davon aus, dass Sie einen LinearLayoutManager mit einem RecyclerView für einen ListView -Styleffekt verwenden. Verwenden Sie in diesem Fall für jede Zeile ein horizontalLinearLayout mit Android:gravity="center", um den Inhalt zu zentrieren.

8
CommonsWare

sie können einige Layouts dynamisch hinzufügen, zum Beispiel:

  • adapterobjekt kann ein horizontales LinearLayout sein

1- Erstellen Sie ein LinearLayout in Java Code und passen Sie es an (Schwerkraft, ...)

2- Fügen Sie linearLayout einige Symbole hinzu

3- Fügen Sie Ihrem Adapter linearLayout hinzu

4- wiederhole 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

Verwenden Sie FlexboxLayout aus com.google.Android:flexbox Bibliothek. Beachten Sie die Eigenschaftswerte flexwrap und justifyContent. Dann setze layout_wrapBefore = true in der Ansicht, in die Sie die Artikelzeile zuvor einschließen möchten.

    <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

Verwenden Sie gridLayoutManager = new GridLayoutManager(context,6) und überschreiben Sie setSpanSizeLookup.

Beispiel:

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;
                        }
                    }
                });

Dies funktioniert, wenn Sie 3 Elemente in einer Reihe anzeigen und in der Mitte des Rasters bleiben möchten.

Ändern Sie die Anzahl der Rasterlayout-Manager entsprechend Ihren Anforderungen.

2
Rahul Devanavar

sie können den neuen layoutManager von google FlexLayoutManager verwenden. Er gibt Ihnen viel Kontrolle und Flexibilität über die recyclerView-Elemente

1
Omar Abdan