You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为span count为2的RecyclerView GridLayoutManager对角线列表项着色

GridLayoutManager(spanCount=2)列表项对角线着色实现方案

核心逻辑

我们可以通过列表项的position直接推导所属颜色分组,无需额外存储状态,核心判断逻辑完全匹配你给出的着色规则:

  • 满足 (position + position / 2) % 2 == 0 的位置(0、3、4、7、8……)归为第一组,使用第一种颜色
  • 其余位置(1、2、5、6、9、10……)归为第二组,使用第二种颜色

可代入任意位置验证匹配性:

position计算结果所属分组
0(0+0)%2=0第一组
1(1+0)%2=1第二组
2(2+1)%2=1第二组
3(3+1)%2=0第一组
4(4+2)%2=0第一组
7(7+3)%2=0第一组
9(9+4)%2=1第二组

代码示例(Kotlin)

在RecyclerView.Adapter的onBindViewHolder方法中添加如下逻辑:

override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
    // 可替换为实际使用的色值
    val colorGroup1 = ContextCompat.getColor(context, R.color.color_first_group)
    val colorGroup2 = ContextCompat.getColor(context, R.color.color_second_group)
    
    // 替换为列表项的根布局
    val itemRoot = holder.itemView
    if ((position + position / 2) % 2 == 0) {
        itemRoot.setBackgroundColor(colorGroup1)
    } else {
        itemRoot.setBackgroundColor(colorGroup2)
    }
    
    // 其余列表项绑定逻辑
}

代码示例(Java)

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    // 可替换为实际使用的色值
    int colorGroup1 = ContextCompat.getColor(context, R.color.color_first_group);
    int colorGroup2 = ContextCompat.getColor(context, R.color.color_second_group);
    
    // 替换为列表项的根布局
    View itemRoot = holder.itemView;
    if ((position + position / 2) % 2 == 0) {
        itemRoot.setBackgroundColor(colorGroup1);
    } else {
        itemRoot.setBackgroundColor(colorGroup2);
    }
    
    // 其余列表项绑定逻辑
}

注意事项

  • 如果列表添加了头部、尾部装饰,需要将对应偏移量计入position的计算
  • 该规则仅适配spanCount固定为2的网格布局

内容的提问来源于stack exchange,提问作者Suman Radhakrishnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:09:03