Android Studio中如何通过setTextColor()实现随主题切换文字颜色
实现步骤
核心思路是不要硬编码黑白颜色值,依赖Android的资源适配机制自动匹配深浅模式对应的色值,再传给setTextColor()即可。
- 第一步:配置适配双模式的颜色资源
在浅色模式默认的res/values/colors.xml中添加文字色定义:
新建深色模式专属资源目录<color name="text_primary">#000000</color> <!-- 浅色模式下的黑色文字 -->res/values-night/,在该目录下的colors.xml中定义同名颜色:<color name="text_primary">#FFFFFF</color> <!-- 深色模式下的白色文字 --> - 第二步:代码中调用
setTextColor()时传入适配当前主题的色值
不要直接传Color.BLACK/Color.WHITE这类硬编码色值,用ContextCompat.getColor()取对应主题下的颜色资源:
如果是Fragment、RecyclerView.Adapter等非Activity场景,替换成当前持有的合法Context实例即可:// Activity场景 val textView = findViewById<TextView>(R.id.my_text) textView.setTextColor(ContextCompat.getColor(this, R.color.text_primary))// Adapter onBindViewHolder场景示例 holder.textView.setTextColor(ContextCompat.getColor(holder.itemView.context, R.color.text_primary)) - 可选适配:应用内手动切换主题场景
如果你的应用支持在不重启Activity的情况下手动切换深浅主题,需要在onConfigurationChanged回调中重新执行一次上述setTextColor()逻辑,否则颜色不会随主题即时刷新。
避坑提示:不要调用废弃的
resources.getColor(R.color.text_primary)方法取色,该方法不会关联当前主题配置,在部分系统版本上会出现颜色匹配错误的问题。
内容的提问来源于stack exchange,提问作者Marcel
相关产品推荐
相关产品推荐

