如何在Recyclerview中删除此填充?

命运

代码 :

private void configViews(View view) {
    int spanCount = 3; // 3 columns
    int spacing = 3;
    boolean includeEdge = true;
    mRecyclerView = (RecyclerView) view.findViewById(R.id.rv_flower_red);
    mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(spanCount, spacing, includeEdge));
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());
    mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity().getApplicationContext(), spanCount));
    mFlowerAdapter = new FlowerAdapter_grid(this);
    mRecyclerView.setAdapter(mFlowerAdapter);
}

public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {

    private int spanCount;
    private int spacing;
    private boolean includeEdge;

    public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
        this.spanCount = spanCount;
        this.spacing = spacing;
        this.includeEdge = includeEdge;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        int position = parent.getChildAdapterPosition(view); // item position
        int column = position % spanCount; // item column

        if (includeEdge) {
            outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing)
            outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing)

            if (position < spanCount) { // top edge
                outRect.top = spacing;
            }
            outRect.bottom = spacing; // item bottom
        } else {
            outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing)
            outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f /    spanCount) * spacing)
            if (position >= spanCount) {
                outRect.top = spacing; // item top
            }
        }
    }
}

该代码的核心来自https://stackoverflow.com/a/30701422/6736285

但是当我使用该代码时, 在此处输入图片说明

Gridlayout在图像的顶部或底部具有填充。

如您所见,垂直填充过多。

问题:如何删除该填充?请让我知道答案吗?

这是我的FlowerAdapter_grid:

public class FlowerAdapter_grid extends RecyclerView.Adapter<FlowerAdapter_grid.Holder> {

    private static final Object TAG = FlowerAdapter_grid.class.getSimpleName();
    private final FlowerClickListener mListener;
    private List<Flower> mFlowers;
    public FlowerAdapter_grid(FlowerClickListener listener) {
        mFlowers = new ArrayList<>();
        mListener = listener;
    }
    @Override
    public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
        View row = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item_grid, null, false);
        return new Holder(row);
    }
    @Override
    public void onBindViewHolder(Holder holder, int position) {
        Flower currFlower = mFlowers.get(position);
        Glide.with(holder.itemView.getContext())
                .load(currFlower.getImage())
                .thumbnail(0.5f)
                .override(300, 300)
                .centerCrop()
                .into(holder.mImage);
    }

    @Override
    public int getItemCount() {
        return mFlowers.size();
    }

    public void addFlower(Flower flower) {
        mFlowers.add(flower);
        notifyDataSetChanged();
    }
    public void clear(){
        mFlowers.clear();
        notifyDataSetChanged();
    }

    public Flower getSelectedFlower(int position) {
        return mFlowers.get(position);
    }

    public class Holder extends RecyclerView.ViewHolder implements View.OnClickListener {
        private ImageView mImage;
        public Holder(View itemView) {
            super(itemView);
            mImage = (ImageView) itemView.findViewById(R.id.iv_photo);
            itemView.setOnClickListener(this);
        }
        @Override
        public void onClick(View view) {
            mListener.onClick(getLayoutPosition());
        }
    }

    public interface FlowerClickListener {
        void onClick(int position);
    }
}

row_item_grid

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/iv_photo"
        />
</LinearLayout>

我的片段布局

<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/swipeContainer_red"
    >
    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_flower_red"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none">
    </android.support.v7.widget.RecyclerView>
</android.support.v4.widget.SwipeRefreshLayout>

尝试后,它返回了此结果。怎么了

在此处输入图片说明

穆罕默德·阿蒂夫(Mohammed Atif)

当我开始使用Recycler View时,我也遇到了这个问题。

问题是您将网格设置为垂直滚动网格并将行数设置为3。

因此,它可以调整row_item_grid布局的大小以连续容纳3个项目。因此,这里的问题是,您已在同一Layout中将Match父对象用作高度父对象LinearLayout。但图片为300dpx300dp,位于LinearLayout的中心。

因此,额外的填充是因为您的LinearLayout。相反,您可以简单地拥有

row_item_grid.xml

<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/iv_photo"
        />

老实说,当视图由单个布局组成时,您不需要父布局。我没有检查您的itemDecoration代码,据我所知,如果按照以下步骤操作,您甚至不需要垂直间距

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Excel中删除此图像?

来自分类Dev

如何在我的输出中删除此数组名称?

来自分类Dev

如何在文件中删除此字符串

来自分类Dev

如何在 Ionic 应用程序中删除此空间

来自分类Dev

删除 RecyclerView 中的填充

来自分类Dev

如何从Android Studio中删除此栏?

来自分类Dev

如何从表格中删除此空白?

来自分类Dev

如何从数组中删除此“ 0”:{

来自分类Dev

如何从列表中删除此元素?

来自分类Dev

如何删除此代码中的重复?

来自分类Dev

如何在SQL中删除此字符串中的多余占位符?

来自分类Dev

如何在Bootstrap 3中删除此水平滚动条

来自分类Dev

我如何在mongoDb中删除此弃用警告,为什么会发生?

来自分类Dev

如何在Eclipse编辑器中删除此UI元素

来自分类Dev

如何在C ++中删除此二维动态数组

来自分类Dev

如何在Android的操作栏选项卡中删除此气泡(指示灯)?

来自分类Dev

如何在 mainActivity 布局的工具栏中删除此箭头?

来自分类Dev

那是什么以及如何在 Chrome 中删除此样式?

来自分类Dev

如何在MigLayout中删除JPanel填充?

来自分类Dev

如何在 UITableViewCell 中删除右填充

来自分类Dev

如何在<ul>开始之前删除此换行符?

来自分类Dev

如何在Android的RecyclerView中填充数据?

来自分类Dev

如何从我的HTML页面中删除此侧边栏?

来自分类Dev

如何从组合框中删除此点击操作javascript

来自分类Dev

如何删除此文件中不必要的部分?

来自分类Dev

如何从ng-repeat中删除此li元素?

来自分类Dev

如何从正则表达式中删除此字符?

来自分类Dev

如何在破折号后删除此字符串中的所有数字?

来自分类Dev

如何在C#中删除解密中的填充

Related 相关文章

热门标签

归档