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
相关产品推荐
相关产品推荐

