You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修改状态栏文本颜色?自定义黄、绿等非系统预设样式

嘿,这个问题我踩过不少坑!状态栏文本颜色的控制其实得看你是Android还是iOS开发,俩系统的机制差挺多的,我给你掰扯清楚:

Android 端解决方案

Android系统对状态栏文本颜色的限制比较严格,分版本来看:

针对 Android 12+(API 31 及以上)

从Android 12开始,系统终于支持自定义状态栏文本/图标的任意颜色了,步骤如下:

  1. 确保你的Activity没有锁定系统状态栏的样式(比如在主题里不要强制设置android:windowLightStatusBar
  2. 在Activity的onCreate方法里添加以下代码(以Kotlin为例):
import android.os.Build
import android.view.WindowInsetsController
import androidx.core.content.ContextCompat

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    window.insetsController?.let { controller ->
        // 关闭系统强制的对比度检查,允许自定义颜色
        controller.setSystemBarContrastEnforced(false)
        // 设置状态栏背景色(这里用你已经设置好的颜色)
        window.statusBarColor = ContextCompat.getColor(this, R.color.your_status_bar_bg)
        // 设置状态栏文本/图标的颜色为黄色(换成你要的绿色、橙色都行)
        controller.setForegroundColor(ContextCompat.getColor(this, R.color.yellow))
    }
}

针对 Android 11 及以下(API 30 及以下)

很遗憾,这个版本的系统只允许状态栏文本在黑色和白色之间切换,没法设置黄色、绿色这种自定义颜色。你只能通过以下代码切换黑白:

// 浅色状态栏(背景浅)用黑色文本
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
// 深色状态栏(背景深)用白色文本
window.decorView.systemUiVisibility = 0

如果一定要用自定义颜色,只能考虑隐藏系统状态栏,自己写一个自定义的状态栏View,但这种方案会有刘海屏、导航栏适配等一堆问题,不推荐。

iOS 端解决方案

iOS默认的系统状态栏同样只支持黑/白两种文本颜色,要设置黄色、绿色这种自定义颜色,必须隐藏系统状态栏,自己实现一个自定义状态栏

步骤如下:

  1. 在你的Info.plist文件中添加两个配置:
    • 设置UIViewControllerBasedStatusBarAppearanceYES
    • 设置UIStatusBarHiddenYES(隐藏系统状态栏)
  2. 在ViewController的viewDidLoad里添加自定义状态栏的代码(以Swift为例):
import UIKit

override func viewDidLoad() {
    super.viewDidLoad()
    
    // 获取状态栏高度(适配刘海屏/非刘海屏)
    let statusBarHeight = UIApplication.shared.statusBarFrame.height
    // 创建自定义状态栏View
    let customStatusBar = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: statusBarHeight))
    // 设置状态栏背景色(用你已经设置好的颜色)
    customStatusBar.backgroundColor = .blue
    // 添加文本标签
    let statusLabel = UILabel(frame: customStatusBar.bounds)
    statusLabel.text = "9:41" // 这里可以动态获取系统时间
    statusLabel.textColor = .yellow // 自定义文本颜色,换成绿色也行
    statusLabel.textAlignment = .center
    statusLabel.font = UIFont.systemFont(ofSize: 12)
    // 添加到View上
    customStatusBar.addSubview(statusLabel)
    view.addSubview(customStatusBar)
    
    // 可选:监听系统时间变化,更新状态栏文本
    NotificationCenter.default.addObserver(self, selector: #selector(updateTime), name: UIApplication.significantTimeChangeNotification, object: nil)
}

@objc func updateTime() {
    // 这里更新statusLabel的文本为当前时间
    let formatter = DateFormatter()
    formatter.timeStyle = .short
    (view.subviews.first(where: { $0 is UILabel }) as? UILabel)?.text = formatter.string(from: Date())
}

注意:自定义状态栏需要自己处理时间更新、旋转适配等细节,不过灵活性拉满,完全可以控制文本颜色。

额外注意事项
  • 如果你用的是跨平台框架(比如Flutter、React Native),方案会略有不同,但核心逻辑还是一样:Android 12+用系统API,低版本只能切换黑白;iOS必须自定义状态栏。
  • 自定义颜色的时候要注意可读性,比如黄色配浅色背景可能看不清,最好做个对比度检查。

内容的提问来源于stack exchange,提问作者Muhammad Haris Rafiq

火山引擎 最新活动