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

Android中Color.xml颜色显示异常问题排查与修复咨询

问题分析与修复方案

你遇到的颜色显示异常问题,核心原因是错误地将颜色资源ID直接作为颜色值使用。R.color.masaHazirlaniyor这类返回的是资源的整数ID(比如0x7f060005),而非实际的RGB颜色值,当你把这个ID传给setCardBackgroundColor或setTextColor时,系统会把它当作颜色值解析,自然会出现颜色显示错乱(比如蓝色变紫色)的情况。

具体修复步骤

方案1:在设置颜色时转换资源ID为实际颜色值

这种方法不需要修改MASADURUMBILGILERI类,只需要在setData方法中,通过ContextCompat.getColor()将资源ID转换为正确的颜色值:

fun setData(position: Int, olusturulan: MasaBilgileri) {
    masa.MASAADI.setText(olusturulan.MASAADI)
    val adisyonBilgisi = ADISYONLISTESI.filter{ adisyon -> adisyon.MASAADI == olusturulan.MASAADI}
    if(adisyonBilgisi.isNotEmpty()){
        val DURUMKONTROL = masaDurumuBelirle(adisyonBilgisi[0].DURUM)
        val context = itemView.context // 获取View的Context
        masa.MASATUTARI.setText(adisyonBilgisi[0].TUTAR.toString())
        masa.MASADURUMU.setText(DURUMKONTROL[0].MASADURUMU)
        
        // 文字颜色是直接的Color常量,可直接使用
        masa.MASAADI.setTextColor(DURUMKONTROL[0].YAZIRENK)
        masa.MASATUTARI.setTextColor(DURUMKONTROL[0].YAZIRENK)
        masa.MASADURUMU.setTextColor(DURUMKONTROL[0].YAZIRENK)
        
        // 将背景色资源ID转为实际颜色值
        val bgColor = ContextCompat.getColor(context, DURUMKONTROL[0].ARKAPLANRENK)
        masa.setCardBackgroundColor(bgColor)
    }
}

方案2:在masaDurumuBelirle方法中预先转换颜色值

这种方法更彻底,直接在生成状态数据时就把资源ID转为实际颜色值,后续设置时直接使用即可:

  1. 修改masaDurumuBelirle方法,传入Context来解析颜色:
fun masaDurumuBelirle(DURUM : Int, context: Context) : ArrayList<MASADURUMBILGILERI>{
    val durumlar = ArrayList<MASADURUMBILGILERI>()
    when(DURUM){
        0 -> { 
            val bgColor = ContextCompat.getColor(context, R.color.masaBekliyor)
            durumlar.add(MASADURUMBILGILERI("BEKLİYOR", bgColor, Color.BLACK))
        }
        1 -> { 
            val bgColor = ContextCompat.getColor(context, R.color.masaHazirlaniyor)
            durumlar.add(MASADURUMBILGILERI("HAZIRLANIYOR", bgColor, Color.WHITE))
        }
        2 -> { 
            val bgColor = ContextCompat.getColor(context, R.color.masaHazir)
            durumlar.add(MASADURUMBILGILERI("HAZIR", bgColor, Color.BLACK))
        }
        3 -> { 
            val bgColor = ContextCompat.getColor(context, R.color.masaServis)
            durumlar.add(MASADURUMBILGILERI("SERVİS E.", bgColor, Color.BLACK))
        }
        4 -> { 
            val bgColor = ContextCompat.getColor(context, R.color.masaIptal)
            durumlar.add(MASADURUMBILGILERI("İPTAL", bgColor, Color.WHITE))
        }
    }
    return durumlar
}
  1. 在setData中调用该方法时传入Context:
val DURUMKONTROL = masaDurumuBelirle(adisyonBilgisi[0].DURUM, itemView.context)

修改后,MASADURUMBILGILERI中的ARKAPLANRENK就是正确的颜色值,直接设置到View上就不会出现颜色错乱的问题了。

额外建议

  • 推荐使用ContextCompat.getColor(),它兼容所有Android版本,无需处理API版本差异。
  • 建议把MASADURUMBILGILERI的属性名改成小写开头(比如masaDurumu、arkaplanRenk),符合Kotlin的命名规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:27:39