基于背景色自动切换文本颜色 - Android Studio/Kotlin实现
实现方案
核心逻辑是通过计算背景色的感知亮度,阈值判断后动态切换文本颜色,以下是可直接复用的Kotlin实现:
- 方案1:自定义颜色判断扩展函数(无需额外依赖)
import android.graphics.Color /** * 判断当前颜色是否为亮色 * @return 亮色返回true,暗色返回false */ fun Int.isLightColor(): Boolean { val red = Color.red(this) val green = Color.green(this) val blue = Color.blue(this) // 采用人眼感知权重计算亮度,范围0-255 val luminance = 0.299 * red + 0.587 * green + 0.114 * blue // 阈值可根据实际视觉效果微调,默认128 return luminance > 128 }
使用方式:在用户选色后设置背景的逻辑中调用即可
// selectedColor为用户选中的颜色值 yourRootView.setBackgroundColor(selectedColor) yourTextView.setTextColor(if (selectedColor.isLightColor()) Color.BLACK else Color.WHITE)
- 方案2:使用AndroidX官方工具类实现(项目已引入AndroidX时推荐)
import android.graphics.Color import androidx.core.graphics.ColorUtils // calculateLuminance返回值范围为0-1,阈值默认取0.5即可 val textColor = if (ColorUtils.calculateLuminance(selectedColor) > 0.5f) { Color.BLACK } else { Color.WHITE } yourTextView.setTextColor(textColor)
小提示:两种方案的阈值都可以根据你的应用设计需求微调,多次测试不同颜色下的文本可读性后调整到最优值即可。
内容的提问来源于stack exchange,提问作者kwitter
相关产品推荐
相关产品推荐

