Ionic中如何在加载/启动页时设置Android状态栏颜色?
嗨,我太懂这个糟心的问题了——Cordova的StatusBar相关配置非要等deviceready事件触发才生效,导致启动页显示的那段时间状态栏一直黑着,完全破坏视觉连贯性!其实咱们可以通过Android原生的样式配置绕开这个限制,直接在应用启动的第一时间就把状态栏颜色搞定,不用等Cordova初始化。
下面是针对Android平台的具体操作步骤:
创建启动页专用主题样式
进入你的Cordova项目的platforms/android/app/src/main/res/values目录,新建(如果已经存在就直接编辑)style.xml文件,写入以下内容:<?xml version="1.0" encoding="utf-8"?> <resources> <!-- 定义适配启动页的主题,继承支持状态栏配置的基础主题 --> <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar"> <!-- 直接设置你想要的状态栏颜色,这里用你指定的#1FBBA5 --> <item name="android:statusBarColor">#1FBBA5</item> <!-- 如果你的启动页需要全屏隐藏状态栏,可以取消下面这行注释,否则留空即可 --> <!-- <item name="android:windowFullscreen">true</item> --> </style> </resources>把主题关联到启动入口Activity
打开platforms/android/app/src/main/AndroidManifest.xml,找到带有<intent-filter>包含MAIN和LAUNCHER的那个Activity(这就是应用的启动入口),给它添加android:theme="@style/SplashTheme"属性。修改后代码大概是这样:<activity android:name="org.apache.cordova.splashscreen.SplashScreen" android:theme="@style/SplashTheme" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>要是你的启动入口是主CordovaActivity(比如
android:name="com.yourAppPackage.MainActivity"),就把主题属性加在这个Activity标签上就行。编译验证效果
重新编译并运行Android项目,你会发现启动页一显示,状态栏就已经是你设置的#1FBBA5颜色了,再也不会出现先黑一下再变色的尴尬情况!
这个方法的核心逻辑是:绕开Cordova的初始化周期,直接让Android系统在启动应用的第一时间就应用我们定义的原生主题样式,状态栏颜色自然同步生效。等deviceready触发后,Cordova的StatusBar插件配置会继续接管,只要颜色设置一致,就能保持视觉统一。
内容的提问来源于stack exchange,提问作者distante

