小米设备Android应用颜色显示异常问题求助
Android应用仅小米设备颜色显示异常问题
我的Android应用在小米设备上颜色显示不符合预期,三星设备及模拟器均无此问题。相关代码如下:
初始化代码
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO); }
主题样式(res/values/styles.xml)
<resources xmlns:tools="http://schemas.android.com/tools"> <style name="MeuTema" parent="Theme.AppCompat.Light"> <item name="colorPrimaryDark">@color/encarnado</item> <item name="colorPrimary">@color/verde</item> <item name="windowActionBarOverlay">false</item> <item name="android:forceDarkAllowed">false</item> </style> </resources>
异常代码:文本颜色未按预期显示
holder.valueTextView.setTextColor(ContextCompat.getColor(holder.valueTextView.getContext(), R.color.colorPrimaryDark)); if (valorAtual > valorSalvo) { holder.valueTextView.setTextColor(ContextCompat.getColor(holder.valueTextView.getContext(), R.color.verde)); } else if (valorAtual < valorSalvo) { holder.valueTextView.setTextColor(ContextCompat.getColor(holder.valueTextView.getContext(), R.color.encarnado)); }
针对性解决建议
- 排查MIUI系统级颜色适配:小米MIUI自带「深色模式自动适配」「色彩风格调整」等功能,即便代码中锁定了浅色模式,部分版本仍会强制修改应用内颜色。可先在设备设置中关闭该应用的深色模式适配,验证是否解决问题。
- 替换颜色获取方式:改用
AppCompatResources.getColor()替代ContextCompat.getColor(),它对AppCompat主题的兼容性更好,能规避部分厂商的主题篡改逻辑:holder.valueTextView.setTextColor(AppCompatResources.getColor(holder.valueTextView.getContext(), R.color.colorPrimaryDark)); if (valorAtual > valorSalvo) { holder.valueTextView.setTextColor(AppCompatResources.getColor(holder.valueTextView.getContext(), R.color.verde)); } else if (valorAtual < valorSalvo) { holder.valueTextView.setTextColor(AppCompatResources.getColor(holder.valueTextView.getContext(), R.color.encarnado)); } - 直接使用十六进制颜色值:如果上述方法无效,可绕过颜色资源引用,直接在代码中写入目标颜色的十六进制值(如
0xFF00FF00代表绿色),避免系统对资源颜色的修改。 - 强化主题锁定:在
AndroidManifest.xml的<application>标签中明确指定主题,并添加元数据确保主题生效:<application ... android:theme="@style/MeuTema"> <meta-data android:name="android.app.theme" android:resource="@style/MeuTema" /> </application>
内容的提问来源于stack exchange,提问作者João Marques
相关产品推荐
相关产品推荐

