@capacitor/status-bar
StatusBar API 提供配置状态栏样式、显示或隐藏状态栏的方法。
安装
npm install @capacitor/status-bar
npx cap sync
Android 16+ 行为变更
针对使用 Capacitor 8 且目标 API 为 Android 16(API 级别 36) 及更高版本的应用,以下状态栏配置选项将不再生效:
overlaysWebViewbackgroundColor
这些选项依赖于能否选择退出 Android 的边到边(edge-to-edge) 系统 UI 行为,该行为允许应用控制状态栏的覆盖方式和背景色。
在 Android 15(API 级别 35) 中,仍然可以通过在应用布局文件中设置 windowOptOutEdgeToEdgeEnforcement 属性来退出这种强制行为。
如果不设置该属性,应用会默认将 overlaysWebView 视为始终为 true。
更多细节请参阅 Android 文档:https://developer.android.com/reference/android/R.attr#windowOptOutEdgeToEdgeEnforcement
从 Android 16 开始,此退出选项不再可用,该行为由系统强制执行。
因此,overlaysWebView 和 backgroundColor 配置选项将不再产生任何效果。
iOS 注意事项
此插件 需要在 Info.plist 中将“基于视图控制器的状态栏外观”(UIViewControllerBasedStatusBarAppearance)设置为 YES。
请参阅 配置 iOS 获取帮助。
状态栏的可见性默认是可见,样式默认是 Style.Default。
您可以通过在 Info.plist 中添加 UIStatusBarHidden 和/或 UIStatusBarStyle 来修改这些默认值。
示例
import { StatusBar, Style } from '@capacitor/status-bar';
// 仅 iOS
window.addEventListener('statusTap', function () {
console.log('状态栏被点击');
});
// 在透明状态栏下显示内容
StatusBar.setOverlaysWebView({ overlay: true });
const setStatusBarStyleDark = async () => {
await StatusBar.setStyle({ style: Style.Dark });
};
const setStatusBarStyleLight = async () => {
await StatusBar.setStyle({ style: Style.Light });
};
const hideStatusBar = async () => {
await StatusBar.hide();
};
const showStatusBar = async () => {
await StatusBar.show();
};
配置
可用的配置值如下:
| 属性 | 类型 | 描述 | 默认值 | 始于 |
|---|---|---|---|---|
overlaysWebView | boolean | 状态栏是否覆盖在网页视图之上。在 Android 15+ 上不可用。 | true | 1.0.0 |
style | string | 状态栏文本的样式。 | default | 1.0.0 |
backgroundColor | string | 状态栏背景色,十六进制格式 #RRGGBB。如果 overlaysWebView 为 true 则不生效。在 Android 15+ 上不可用。 | #000000 | 1.0.0 |
示例
在 capacitor.config.json 中:
{
"plugins": {
"StatusBar": {
"overlaysWebView": false,
"style": "DARK",
"backgroundColor": "#ffffffff"
}
}
}
在 capacitor.config.ts 中:
/// <reference types="@capacitor/status-bar" />
import { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
plugins: {
StatusBar: {
overlaysWebView: false,
style: "DARK",
backgroundColor: "#ffffffff",
},
},
};
export default config;
API
setStyle(...)
setStyle(options: StyleOptions) => Promise<void>
设置状态栏的当前样式。
| 参数 | 类型 |
|---|---|
options | |
始于: 1.0.0
setBackgroundColor(...)
setBackgroundColor(options: BackgroundColorOptions) => Promise<void>
设置状态栏的背景色。
调用此函数会更新状态栏的前景色(如果样式设置为 default),但在 iOS 17 以下版本除外。
在 Android 15+ 上不可用。
| 参数 | 类型 |
|---|---|
options | |
始于: 1.0.0
show(...)
show(options?: AnimationOptions | undefined) => Promise<void>
显示状态栏。
在 iOS 上,如果状态栏初始是隐藏的且初始样式设置为 UIStatusBarStyleLightContent,第一次调用 show 时动画可能会出现闪烁,即文本先显示为深色然后过渡到浅色。
建议在第一次调用时使用 Animation.None 作为动画选项。
| 参数 | 类型 |
|---|---|
options | |
始于: 1.0.0
hide(...)
hide(options?: AnimationOptions | undefined) => Promise<void>
隐藏状态栏。
| 参数 | 类型 |
|---|---|
options | |
始于: 1.0.0
getInfo()
getInfo() => Promise<StatusBarInfo>
获取状态栏当前状态的信息。
返回值:
Promise<StatusBarInfo>
始于: 1.0.0
--------------------### setOverlaysWebView(...)
setOverlaysWebView(options: SetOverlaysWebViewOptions) => Promise<void>
设置状态栏是否应覆盖 WebView,以便使用其下方的空间。 在 Android 15+ 上不可用。
| 参数 | 类型 |
|---|---|
options | |
自: 1.0.0
接口
StyleOptions
| 属性 | 类型 | 描述 | 自 |
|---|---|---|---|
style | | 状态栏文本的样式。 | 1.0.0 |
BackgroundColorOptions
| 属性 | 类型 | 描述 | 自 |
|---|---|---|---|
color | string | 设置状态栏颜色的十六进制颜色值。 | 1.0.0 |
AnimationOptions
| 属性 | 类型 | 描述 | 默认值 | 自 |
|---|---|---|---|---|
animation | | 显示或隐藏时使用的状态栏动画类型。此选项仅在 iOS 上受支持。 | Animation.Fade | 1.0.0 |
StatusBarInfo
| 属性 | 类型 | 描述 | 自 |
|---|---|---|---|
visible | boolean | 状态栏是否可见。 | 1.0.0 |
style | | 当前状态栏的样式。 | 1.0.0 |
color | string | 当前状态栏的颜色。 | 1.0.0 |
overlays | boolean | 状态栏是否处于覆盖模式。 | 1.0.0 |
SetOverlaysWebViewOptions
| 属性 | 类型 | 描述 | 自 |
|---|---|---|---|
overlay | boolean | 是否覆盖状态栏。 | 1.0.0 |
枚举
Style
| 成员 | 值 | 描述 | 自 |
|---|---|---|---|
Dark | 'DARK' | 深色背景下的浅色文本。 | 1.0.0 |
Light | 'LIGHT' | 浅色背景下的深色文本。 | 1.0.0 |
Default | 'DEFAULT' | 样式基于设备外观。如果设备使用深色模式,状态栏文本将为浅色。如果设备使用浅色模式,状态栏文本将为深色。 | 1.0.0 |
Animation
| 成员 | 值 | 描述 | 自 |
|---|---|---|---|
None | 'NONE' | 显示/隐藏时不使用动画。 | 1.0.0 |
Slide | 'SLIDE' | 显示/隐藏时使用滑动动画。在 iOS 15+ 上无效。 | 1.0.0 |
Fade | 'FADE' | 显示/隐藏时使用淡入淡出动画。 | 1.0.0 |