如何为安卓UI元素设置不受设备深浅模式影响的固定背景色
问题根因
你的应用当前使用了支持深色模式的主题(如Theme.MaterialComponents.DayNight系列),系统在深色模式下会自动匹配res/values-night下的同名资源,或对控件色调进行强制调整,导致你设置的浅灰色被替换为深灰色。
当前问题修复方法
- 检查深色模式颜色资源
找到项目下的res/values-night/colors.xml文件,确认是否存在同名的lite_grey定义:- 如果存在,将其值也修改为
#e2e2e2,保证深浅模式下该颜色取值一致 - 如果不需要其他深色模式资源,也可直接删除
values-night下的颜色配置文件
- 如果存在,将其值也修改为
- 硬编码固定颜色值
直接修改rounded_corner_bottomsheetline.xml的颜色引用,避免系统匹配资源:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:endColor="#e2e2e2" android:startColor="#e2e2e2" /> <corners android:radius="25dp" /> </shape>
全局所有UI固定颜色配置方案
如果需要整个应用所有元素都不跟随系统深浅模式变色,可直接关闭应用的深色模式适配,两种实现方式:
- 代码全局配置
在自定义Application类的onCreate方法中添加以下代码,强制应用始终使用浅色模式:
// Kotlin实现 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
// Java实现 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
- 清单文件主题配置
直接将应用主题替换为不含深色模式适配的浅色主题,修改AndroidManifest.xml的application标签属性:
<application android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.MaterialComponents.Light.NoActionBar">
如果仅需要部分页面固定颜色,可在对应页面的根布局添加属性android:forceDarkAllowed="false",禁止系统对该布局下的所有控件强制调整深色色调。
内容的提问来源于stack exchange,提问作者Vasant Raval
相关产品推荐
相关产品推荐

