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转为实际颜色值,后续设置时直接使用即可:
- 修改
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 }
- 在
setData中调用该方法时传入Context:
val DURUMKONTROL = masaDurumuBelirle(adisyonBilgisi[0].DURUM, itemView.context)
修改后,MASADURUMBILGILERI中的ARKAPLANRENK就是正确的颜色值,直接设置到View上就不会出现颜色错乱的问题了。
额外建议
- 推荐使用
ContextCompat.getColor(),它兼容所有Android版本,无需处理API版本差异。 - 建议把
MASADURUMBILGILERI的属性名改成小写开头(比如masaDurumu、arkaplanRenk),符合Kotlin的命名规范。
内容的提问来源于stack exchange,提问作者Degisim
相关产品推荐
相关产品推荐

