android开发 状态栏颜色修改
封面图
•
2025-10-08
•
Android开发
140
0
0
0
在 Android 开发中,修改状态栏(Status Bar)的颜色是一个常见的需求,特别是在设计 UI 时希望让应用与系统主题一致或实现沉浸式体验。以下是几种常用的方法来修改状态栏颜色。 --- ## ✅ 方法一:使用 `SystemUiVisibility` 和 `WindowInsets` 适用于 **Android 11(API 30)及以上** 的设备。 ```java View view = findViewById(R.id.root_view); view.setOnApplyWindowInsetsListener((v, insets) -> { // 设置状态栏颜色 getWindow().setStatusBarColor(Color.parseColor("#FF5722")); return insets; }); ``` 或者直接设置: ```java getWindow().setStatusBarColor(Color.parseColor("#FF5722")); ``` --- ## ✅ 方法二:在 `AndroidManifest.xml` 中设置主题 你可以通过自定义主题来设置状态栏颜色。 ### 步骤: 1. 在 `res/values/styles.xml` 中定义一个主题: ```xml <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:statusBarColor">#FF5722</item> </style> ``` 2. 在 `AndroidManifest.xml` 中应用这个主题: ```xml <application android:theme="@style/AppTheme" ...> ... </application> ``` > ⚠️ 注意:如果你使用的是 `Theme.MaterialComponents` 或其他 Material 主题,确保你设置了 `android:statusBarColor` 而不是 `statusBarColor`。 --- ## ✅ 方法三:使用 `WindowInsetsController`(推荐用于 API 30+) ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { WindowInsetsController controller = getWindow().getInsetsController(); if (controller != null) { controller.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_DEFAULT); controller.setStatusBarColor(Color.parseColor("#FF5722")); } } ``` --- ## ✅ 方法四:在 Activity 中动态设置 ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().setStatusBarColor(Color.parseColor("#FF5722")); } ``` --- ## ✅ 方法五:沉浸式模式(隐藏状态栏) 如果你想完全隐藏状态栏,可以使用沉浸式模式: ```java View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; decorView.setSystemUiVisibility(uiOptions); ``` > 注意:沉浸式模式下状态栏会消失,但可能会导致用户操作不直观,建议合理使用。 --- ## 📝 小贴士 - 如果你的 App 是在 `Activity` 中运行,确保你在 `onCreate()` 之后调用这些方法。 - 使用 `WindowInsets` 和 `WindowInsetsController` 更加现代和灵活。 - 对于旧版本(如 API 21 以下),可以使用 `SystemUiVisibility` 来控制状态栏的显示/隐藏。 --- 如果你有特定的需求(比如在 Fragment 中设置、透明状态栏等),欢迎继续提问!
上一篇:
Android应用自动更新功能的实现
下一篇:
android自定义button样式
标题录入,一次不能超过6条
返回顶部
留言
留言
评论