Android 15(API34)中AppCompatActivity的enableEdgeToEdge样式不生效
Android 15中enableEdgeToEdge()修改系统栏颜色不生效的解决方法
核心问题点
enableEdgeToEdge()的调用时机错误、SystemBarStyle配置逻辑不匹配当前模式,或是主题硬编码颜色覆盖了设置,都会导致系统栏颜色不更新。
具体修复步骤
调整方法调用时机
必须把enableEdgeToEdge()移到setContentView()之前执行,系统栏样式需要在布局渲染前完成配置才能生效。简化SystemBarStyle配置
既然已经强制开启了浅色模式(MODE_NIGHT_NO),无需用auto()做分支判断,直接用SystemBarStyle.light()指定目标颜色即可:enableEdgeToEdge( statusBarStyle = SystemBarStyle.light(Color.RED), navigationBarStyle = SystemBarStyle.light(Color.RED) )清理主题硬编码配置
打开res/values/styles.xml,确保App主题没有固定状态栏或导航栏颜色,避免覆盖enableEdgeToEdge的设置:<style name="AppTheme" parent="Theme.Material3.Light.NoActionBar"> <!-- 设为透明或直接移除该属性 --> <item name="android:statusBarColor">@android:color/transparent</item> <item name="android:navigationBarColor">@android:color/transparent</item> </style>
修复后的完整代码
class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Force Light Mode AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) // 先配置系统栏样式再加载布局 val primaryDarkColor = Color.RED enableEdgeToEdge( statusBarStyle = SystemBarStyle.light(primaryDarkColor), navigationBarStyle = SystemBarStyle.light(primaryDarkColor) ) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) // Adjust window insets ViewCompat.setOnApplyWindowInsetsListener(window.decorView.rootView) { v, insets -> val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) v.setPadding(0, systemBars.top, 0, 0) insets } } }
内容的提问来源于stack exchange,提问作者Santhosh Kumar
相关产品推荐
相关产品推荐

