Подтвердить что ты не робот

Как центрировать предметы рециркуляции?

Мне нужно центрировать элементы в каждой строке, чтобы они были как в этом макете. Я искал, если есть какой-либо макет, который работает таким образом, не смотря. элементы центрированы в их рядах.

mockup

Вот как это выглядит сейчас в моем коде. enter image description here

4b9b3361

Ответ 1

Возьмите LinearLayout в макете строки RecyclerView, затем отпустите android:layout_gravity="center" до LinearLayout.

Для каждой строки изображений вам нужно взять разные 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>

Ответ 2

Я сделал так: make 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/recycler_photos"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_gravity="center_horizontal"
           android:paddingLeft="@dimen/dp30"
           android:paddingRight="@dimen/dp30" />

 </LinearLayout>

Ответ 3

Я предполагаю, что вы используете LinearLayoutManager с RecyclerView для эффекта ListView -style. В этом случае используйте horizontal LinearLayout для каждой строки с android:gravity="center", чтобы центрировать его содержимое.

Ответ 4

вы можете добавить некоторые макеты динамически, например:

  • Объект-адаптер может быть горизонтальным LinearLayout

1- создать LinearLayout в java-коде и настроить его (гравитация,...)

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

Ответ 5

вы можете использовать новый layoutManager из google FlexLayoutManager это даст вам большой контроль и гибкость над элементами recyclerView

Ответ 6

поместите ваш recyclerview в linearlayout в xml. и использовать (как для recyclerview, так и для linearlayout)

android:layout_gravity="center"

и ширина recyclerview должна быть wrap_content, в то время как linearlayout должен иметь math_parent и вы должны указать ширину для вашего row_item

Ответ 7

Используйте 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 элемента в строке и оставаться в центре сетки.

Измените количество интервалов диспетчера макета сетки, соответственно, ваше требование.