相关文章推荐
老实的冲锋衣  ·  获取LinkedHashMap 的键 - ...·  1 年前    · 
谦虚好学的火柴  ·  如何将HTML网页重定向到另一个URL?-C ...·  2 年前    · 
霸气的弓箭  ·  java判断字符串是否为空或者null - ...·  2 年前    · 
有腹肌的熊猫  ·  【FFmpeg】视频压缩:scale - 掘金·  3 年前    · 
礼貌的皮带  ·  @Order在同一个类的的不同方法的先后问题 ...·  3 年前    · 
小百科  ›  RecycleView嵌套子RecycleView并且网格布局问题开发者社区
recyclerview
纯真的杯子
8 月前
用户10521372

RecycleView嵌套子RecycleView并且网格布局问题

原创
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
发布
用户10521372
社区首页 > 专栏 > RecycleView嵌套子RecycleView并且网格布局问题

RecycleView嵌套子RecycleView并且网格布局问题

原创
作者头像
用户10521372
发布 于 2023-07-07 15:49:49
发布 于 2023-07-07 15:49:49
497 0
举报
文章被收录于专栏: android自用 android自用

问题:子RecycleView网格布局的话,使用GridSpacingItemDecoration控制间隔大小,不断上下滑动,部分间距会不断变大,超出界面

解决方法:

代码语言: java
复制
if (holder.rlv_select.getItemDecorationCount() == 0) {
    int spacing = mContext.getResources().getDimensionPixelSize(R.dimen.dp_20);
    holder.recyclerView.addItemDecoration(new GridSpacingItemDecoration(4, spacing, false));
}

或者(未使用过)

代码语言: javascript
复制
holder.recyclerView.removeItemDecoration();

附带询问AI可以得到的代码:

代码语言: javascript
复制
public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {
    private int spanCount;
    private int spacing;
    private int topSpacing;
    private boolean includeEdge;
    public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
        this.spanCount = spanCount;
        this.spacing = spacing;
        this.includeEdge = includeEdge;
    public GridSpacingItemDecoration(int spanCount, int spacing, int topSpacing, boolean includeEdge) {
        this.spanCount = spanCount;
        this.spacing = spacing;
        this.topSpacing = topSpacing;
        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)
 
推荐文章
老实的冲锋衣  ·  获取LinkedHashMap 的键 - CSDN文库
1 年前
谦虚好学的火柴  ·  如何将HTML网页重定向到另一个URL?-CSDN博客
2 年前
霸气的弓箭  ·  java判断字符串是否为空或者null - CSDN文库
2 年前
有腹肌的熊猫  ·  【FFmpeg】视频压缩:scale - 掘金
3 年前
礼貌的皮带  ·  @Order在同一个类的的不同方法的先后问题_@order优先级_xqcode的博客-CSDN博客
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号