Android 15如何通过最新API设置状态栏颜色及图标适配?
Android 15(API 31+)状态栏颜色设置方案
核心说明
Android 15默认强制启用edgeToEdge(),传统的window.statusBarColorAPI已被废弃,需结合WindowInsetsControllerCompat和EdgeToEdge机制实现状态栏颜色自定义,同时自动适配图标明暗。
步骤1:依赖AppCompat库
确保项目依赖最新AppCompat库,兼容API 31+的Insets控制器:
implementation 'androidx.appcompat:appcompat:1.6.1'
步骤2:Activity中动态设置(推荐)
在Activity的onCreate方法中完成配置,支持动态切换颜色:
import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsControllerCompat import androidx.core.graphics.ColorUtils class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 显式启用EdgeToEdge(Android 15默认已开启,兼容低版本) WindowCompat.setDecorFitsSystemWindows(window, false) val insetsController = WindowInsetsControllerCompat(window, window.decorView) val statusBarColor = getColor(R.color.your_custom_status_bar_color) // 设置状态栏背景色(替代废弃的window.statusBarColor) insetsController.setSystemBarsColor(statusBarColor) // 自动适配图标明暗:根据颜色亮度判断,浅色背景用深色图标,反之用浅色 val isLightBackground = ColorUtils.calculateLuminance(statusBarColor) > 0.5 insetsController.isAppearanceLightStatusBars = isLightBackground } }
步骤3:主题层面全局配置
若需全局统一状态栏样式,可在主题文件中配置:
<!-- res/values/styles.xml --> <style name="AppTheme" parent="Theme.Material3.DayNight.NoActionBar"> <!-- 全局状态栏颜色 --> <item name="android:statusBarColor">@color/your_custom_status_bar_color</item> <!-- 自动适配图标明暗:跟随主题明暗模式 --> <item name="android:windowLightStatusBar">?android:attr/isLightTheme</item> <!-- 启用EdgeToEdge --> <item name="android:windowDecorFitsSystemWindows">false</item> </style>
注意事项
- 内容适配:启用EdgeToEdge后,布局内容会延伸至状态栏下方,需给顶部视图添加
android:paddingTop="?android:attr/statusBarHeight",或通过WindowInsets动态处理内边距,避免内容被遮挡。 - 颜色亮度判断:
ColorUtils.calculateLuminance返回值范围0(纯黑)~1(纯白),以0.5为阈值判断背景明暗,确保图标与背景对比度达标。
内容的提问来源于stack exchange,提问作者Santhosh Kumar
相关产品推荐
相关产品推荐

