Android Studio中Kotlin修改TextView背景失效问题求助
问题原因与修复方案
核心问题
你错误地将Drawable资源ID传入了setBackgroundColor()方法,这个方法的参数要求是颜色的int值(比如Color.parseColor()返回的结果),而非Drawable资源引用。R.drawable.xxx本质是一个int类型的资源ID,但它代表的是Drawable文件的引用,不是颜色值,所以调用setBackgroundColor()传入这个ID时,系统会把它当作颜色值解析,导致背景显示异常或完全不生效。
看你的代码:
- 第一个条件分支中,
indiAu.setBackgroundResource(R.drawable.highbuttoncolor)是正确的,但satuanAu.setBackgroundColor(R.drawable.highbuttoncolor)就犯了上述错误 - 后面两个条件分支里,你全部用
setBackgroundColor()传入Drawable ID,这完全不符合方法的参数要求,是导致背景不变化的直接原因。
修复后的代码
将所有设置背景的代码统一替换为setBackgroundResource()方法(该方法接受Drawable资源ID作为参数,正好匹配你的需求):
private fun updateIndikatorAu(){ // Colors val colorHigh = "#e85218" val colorNormal = "#6b91ca" val colorLow = "#eeaf17" val colorNull = "#7F808B" // Fields - 建议将findViewById移至onCreate中,避免重复查找控件 indiAu = findViewById(R.id.textindi_au) kadarAu = findViewById(R.id.textkadarprof_au) satuanAu = findViewById(R.id.textsatuanprof_au) judulAu = findViewById(R.id.textprof_au) // 数值处理 val nilaiNullAU = 0 val nilaiProfAU = kadarAu.text.toString() val nilai1AU = 7.0 val auNol = nilaiNullAU.toDouble() val auNormal1 = nilai1AU.toDouble() val auProf = nilaiProfAU.toDouble() // 数值过高分支 if (auProf > auNormal1){ indiAu.setBackgroundResource(R.drawable.highbuttoncolor) satuanAu.setBackgroundResource(R.drawable.highbuttoncolor) kadarAu.setTextColor(android.graphics.Color.parseColor(colorHigh)) judulAu.setTextColor(android.graphics.Color.parseColor(colorHigh)) } // 数值正常分支 else if (auProf > auNol && auProf < auNormal1){ indiAu.setBackgroundResource(R.drawable.normalbuttoncolor) satuanAu.setBackgroundResource(R.drawable.normalbuttoncolor) kadarAu.setTextColor(android.graphics.Color.parseColor(colorNormal)) judulAu.setTextColor(android.graphics.Color.parseColor(colorNormal)) } // 数值为0分支 else if (auProf == auNol){ indiAu.setBackgroundResource(R.drawable.nullbuttoncolor) satuanAu.setBackgroundResource(R.drawable.nullbuttoncolor) kadarAu.setTextColor(android.graphics.Color.parseColor(colorNull)) judulAu.setTextColor(android.graphics.Color.parseColor(colorNull)) } }
额外优化建议
- 避免重复查找控件:把
findViewById的调用移到Activity/Fragment的onCreate方法中,只执行一次,提升性能。 - 规范颜色管理:将颜色值定义在
res/values/colors.xml文件中,例如:
然后通过<color name="color_high">#e85218</color> <color name="color_normal">#6b91ca</color>ContextCompat.getColor(this, R.color.color_high)获取颜色值,更符合Android开发规范。 - 动态创建圆角背景:如果你的圆角背景只是纯色+圆角,可以用
ShapeDrawable动态生成,避免创建多个重复的Drawable文件,减少冗余。
内容的提问来源于stack exchange,提问作者Lalu Habib Sasiwimba
相关产品推荐
相关产品推荐

