GridAutoFitLayoutManager показывает дополнительное пространство внизу, когда spancount достигает максимального уровня ширины строки в представлении переработчика - PullRequest
0 голосов
/ 02 апреля 2020

Мой GridAutoFitLayoutManager

import android.content.Context;
import android.util.TypedValue;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

public class GridAutoFitLayoutManager extends GridLayoutManager {
    private int columnWidth;
    private boolean isColumnWidthChanged = true;
    private int lastWidth;
    private int lastHeight;

    public GridAutoFitLayoutManager(@NonNull final Context context, final int columnWidth) {
        /* Initially set spanCount to 1, will be changed automatically later. */
        super(context, 1);
        setColumnWidth(checkedColumnWidth(context, columnWidth));
    }

    public GridAutoFitLayoutManager(
            @NonNull final Context context,
            final int columnWidth,
            final int orientation,
            final boolean reverseLayout) {

        /* Initially set spanCount to 1, will be changed automatically later. */
        super(context, 1, orientation, reverseLayout);
        setColumnWidth(checkedColumnWidth(context, columnWidth));
    }

    private int checkedColumnWidth(Context context, int columnWidth) {
        if (columnWidth <= 0) {
        /* Set default columnWidth value (48dp here). It is better to move this constant
        to static constant on top, but we need context to convert it to dp, so can't really
        do so. */
            columnWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50,
                    context.getResources().getDisplayMetrics());
            Log.i("columnWidth", "" + columnWidth);
        } else {
            columnWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, columnWidth,
                    context.getResources().getDisplayMetrics());
        }
        return columnWidth;
    }

    public void setColumnWidth(final int newColumnWidth) {
        if (newColumnWidth > 0 && newColumnWidth != columnWidth) {
            columnWidth = newColumnWidth;
            isColumnWidthChanged = true;
        }
    }

    @Override
    public void onLayoutChildren(@NonNull final RecyclerView.Recycler recycler, @NonNull final RecyclerView.State state) {
        final int width = getWidth();
        final int height = getHeight();
        if (columnWidth > 0 && width > 0 && height > 0 && (isColumnWidthChanged || lastWidth != width || lastHeight != height)) {
            final int totalSpace;
            if (getOrientation() == RecyclerView.VERTICAL) {
                totalSpace = width - getPaddingRight() - getPaddingLeft();
            } else {
                totalSpace = height - getPaddingTop() - getPaddingBottom();
            }
            final int spanCount = Math.max(1, totalSpace / columnWidth);
            setSpanCount(spanCount);
            Log.i("MySpanCount", "" + spanCount);
            isColumnWidthChanged = false;
        }
        lastWidth = width;
        lastHeight = height;
        super.onLayoutChildren(recycler, state);
    }
}

При добавлении изображений в элемент

Это создает проблему: Добавлено дополнительное пространство во второй строке

Пожалуйста, помогите мне решить эту проблему, поскольку я настраиваю свой диспетчер представления просмотра реселлера следующим образом: val LayoutManager = GridAutoFitLayoutManager (this, resources.getDimensionPixelSize (R.dimen.span_image_width), RecyclerView.HORIZONTAL, false Recycle) .layoutManager = LayoutManager

Здесь R.dimen.span_image_width = 0dp

My Xml

               <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/recyclerView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="@dimen/setting_margin_start"
                android:layout_marginEnd="@dimen/setting_margin_start"
                android:overScrollMode="never"
                android:orientation="horizontal"
                app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
                app:spanCount="1"
                android:columnWidth="@dimen/column_width"
                android:numColumns="auto_fit"
                tools:itemCount="6"
                android:padding="5dp"
                tools:listitem="@layout/item_doc_image"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...