liangjingkanji / BRV

[使用文档] Android 快速构建 RecyclerView, 比 BRVAH 更简单强大
http://liangjingkanji.github.io/BRV/
MIT License
2.59k stars 327 forks source link

网格布局使用分割线,如果数据仅展示一行,setMargin的End无效 #324

Closed ChawLoo closed 1 year ago

ChawLoo commented 1 year ago

问题描述

有一个网格布局,设置了分割线

divider {
    orientation = DividerOrientation.GRID
    setDivider(width = 1)
    setMargin(start = 50, end = 50)
    setColor("#e1e1e1")
}

期望行为

期望start边距和end边距一致

如何复现

将spanCount设置为4,数据条目数量为4个

任何业务相关问题没有fork仓库复现问题一律无法解决, 凭空猜测只会让问题晦涩难懂, 大量耽误项目维护时间

截图

image image 异常堆栈信息或者手机截图/视频(拖拽到输入框即可上传)

版本

ChawLoo commented 1 year ago

另外寻求一下大佬的指点,实现以下样式,如何写分割线 image

liangjingkanji commented 1 year ago

请fork仓库复现问题, 否则非明显bug无法被修复, 我实在没工夫去替每个人复现bug, 严重影响到我自己的工作和框架需求开发了

liangjingkanji commented 1 year ago

这个功能应该就是如此, 他所谓的start和end好像就是针对整个列表不是一个item

具体我也不清楚

liangjingkanji commented 1 year ago

另外寻求一下大佬的指点,实现以下样式,如何写分割线 image

直接写到item的layout布局中, 不需要分割线的就View.GONE(例如边界末尾的item)

liangjingkanji commented 1 year ago

另外寻求一下大佬的指点,实现以下样式,如何写分割线 image

我认为BRV应该支持这种分割线间距效果(以item为基准的间距), 但是不排除有人又想要保持现在的效果(以整个列表为基准的间距)

ChawLoo commented 1 year ago

请fork仓库复现问题, 否则非明显bug无法被修复, 我实在没工夫去替每个人复现bug, 严重影响到我自己的工作和框架需求开发了

大佬,已fork,位于网格列表-网格分割线,如果网格布局只有一行时,end的边距就无效了

liangjingkanji commented 1 year ago

你这个截图补全我看不清楚什么分割线需求, 我感觉你垂直分割线想要以item为基准的间隔, 但是你水平分割线又不想要分割线间隔

ChawLoo commented 1 year ago

你这个截图补全我看不清楚什么分割线需求, 我感觉你垂直分割线想要以item为基准的间隔, 但是你水平分割线又不想要分割线间隔

对,就是这个意思

liangjingkanji commented 1 year ago

把图截全了, 我看不太清楚, 觉得太敏感就只能靠自己了

ChawLoo commented 1 year ago

把图截全了, 我看不太清楚, 觉得太敏感就只能靠自己了

image

ChawLoo commented 1 year ago

提的Bug已经fork并提交复现代码了,位于网格列表-网格分割线

liangjingkanji commented 1 year ago

嗯, 为什么左边的还没有分割线了

ChawLoo commented 1 year ago

嗯, 为什么左边的还没有分割线了

截图原因,手机上有

liangjingkanji commented 1 year ago
implementation 'com.github.liangjingkanji:BRV:1.3.90'

setMargin()新增两个参数baseItemStart/baseItemEnd

binding.rv.grid(3, orientation = RecyclerView.VERTICAL).divider {
    orientation = DividerOrientation.GRID
    setDivider(1, true)
    setMargin(16, 16, dp = true, baseItemStart = true)
    setColor(Color.WHITE)
}.setup {
    addType<DividerModel>(R.layout.item_divider_vertical)
}.models = getData()
ChawLoo commented 1 year ago

nice,需求得到了解决,感恩大佬,但是那个Bug还在,网格布局,如果当只存在一行数据时,setMargin(start = 50, end = 50),竖线的底部没有间距

ChawLoo commented 1 year ago

另外有一点,如果我想着 横线不设置margin,竖线设置margin的话,因为divier可以组合的特性,尝试性去实现,发现这种方式下,设置的间距又回归了列表为基准的模式了

liangjingkanji commented 1 year ago

另外有一点,如果我想着 横线不设置margin,竖线设置margin的话,因为divier可以组合的特性,尝试性去实现,发现这种方式下,设置的间距又回归了列表为基准的模式了

setMargin(16, 0, dp = true, baseItemStart = true) 我发现并没有问题

image
liangjingkanji commented 1 year ago

nice,需求得到了解决,感恩大佬,但是那个Bug还在,网格布局,如果当只存在一行数据时,setMargin(start = 50, end = 50),竖线的底部没有间距

image

有间距, 依旧没问题

liangjingkanji commented 1 year ago

再有问题你fork仓库复现后再告诉我, 我已经反复为你复现很多次问题了

ChawLoo commented 1 year ago

我突然get了你的baseItemStart 和baseItemEnd开关的作用了,没其他问题了,特地来回复一下。再一次感谢

liangjingkanji commented 1 year ago

可能我没描述清楚这两个参数, 不过我没有更好的描述方法, 如果你有的话可以发起pr完善此处