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

Android中如何不依赖Jetpack,用Kotlin编程修改RecyclerView控件背景色?

不依赖AndroidX修改RecyclerView项背景色的Kotlin方案

方法1:用Resources.getColor的带Theme重载方法

这是官方替代废弃的getResources().getColor()的方案,不需要依赖AndroidX,要求API 23及以上。如果要兼容更低版本,可以通过版本判断处理。

override fun onBindViewHolder(holder: NotificationsViewHolder, position: Int) {
    holder.title.text = notifications[position].title
    holder.description.text = notifications[position].description
    
    // 根据自定义条件选择颜色资源ID
    val colorResId = if (notifications[position].isRead) {
        R.color.greyLight
    } else {
        R.color.orangeLight
    }
    
    // 获取颜色值,适配不同API版本
    val bgColor = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        context.resources.getColor(colorResId, context.theme)
    } else {
        // 兼容API 23以下,暂时使用废弃方法(添加注解压制警告)
        @Suppress("DEPRECATION")
        context.resources.getColor(colorResId)
    }
    holder.itemView.setBackgroundColor(bgColor)
}

方法2:直接使用十六进制颜色值

如果不想牵扯资源获取的API问题,直接把颜色的十六进制值写进代码里,完全避开资源相关的依赖。

override fun onBindViewHolder(holder: NotificationsViewHolder, position: Int) {
    holder.title.text = notifications[position].title
    holder.description.text = notifications[position].description
    
    // 根据条件选择对应十六进制颜色
    val bgColor = if (notifications[position].isRead) {
        // 替换成你自己的R.color.greyLight对应的十六进制值
        0xFFF5F5F5.toInt()
    } else {
        // 替换成你自己的R.color.orangeLight对应的十六进制值
        0xFFFFE0B2.toInt()
    }
    holder.itemView.setBackgroundColor(bgColor)
}

注意:十六进制颜色要以0xFF开头(代表不透明),后面跟RGB的两位十六进制值,最后转成Int类型才能用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:01:19