Codova Android 状态栏全透明 启动页全面屏总结

it2022-05-05  265

使用到的Codova插件

状态栏插件:cordova-plugin-statusbar

启动页插件:cordova-plugin-splashscreen

1.设置状态栏全透明

修改 StatusBar.java 文件

文件路径 platforms\android\app\src\main\java\org\apache\cordova\statusbar(注:不是插件目录下的StatusBar.java文件)

修改如下

// Clear flag FLAG_FORCE_NOT_FULLSCREEN which is set initially // by the Cordova. Window window = cordova.getActivity().getWindow(); // 添加内容start // window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); // window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); // window.setStatusBarColor(Color.TRANSPARENT); // window.setNavigationBarColor(Color.TRANSPARENT); // window.getDecorView().setSystemUiVisibility( // View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); // window.setStatusBarColor(Color.TRANSPARENT); //AndroidSdk版本判断 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //使内容进入状态栏 window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); //添加状态栏透明背景色 window.setStatusBarColor(Color.TRANSPARENT); //设置底部导航栏透明 部分手机会让app与底部导航重叠所以不要设置 // window.setNavigationBarColor(Color.TRANSPARENT); //将状态栏背景标记为浅色,让字体显示成黑色 View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR //部分手机使用上面设置后状态栏为半透明 加上View.SYSTEM_UI_FLAG_LAYOUT_STABLE View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 设置成全透明 window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } // 添加内容end window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); // Read 'StatusBarBackgroundColor' from config.xml, default is #000000. // setStatusBarBackgroundColor(preferences.getString("StatusBarBackgroundColor", // "#000000")); // Read 'StatusBarStyle' from config.xml, default is 'lightcontent'. // setStatusBarStyle(preferences.getString("StatusBarStyle", // "blacktranslucent"));

注:

需要注释掉原文件中的

// setStatusBarStyle(preferences.getString("StatusBarStyle","blacktranslucent"));

//setStatusBarBackgroundColor(preferences.getString("StatusBarBackgroundColor","#000000"));

至此,安卓手机状态栏变成全透明

2.修改启动页全屏

修改文件 SplashScreen.java 

文件路径:platforms\android\app\src\main\java\org\apache\cordova\splashscreen

修改如下

// Create and show the dialog splashDialog = new Dialog(context, android.R.style.Theme_Translucent_NoTitleBar); // check to see if the splash screen should be full screen //修改开始 // if ((cordova.getActivity().getWindow().getAttributes().flags & // WindowManager.LayoutParams.FLAG_FULLSCREEN) // == WindowManager.LayoutParams.FLAG_FULLSCREEN) { //隐藏状态栏和底部导航栏 splashDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); splashDialog.getWindow().getDecorView() .setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); // } //修改结束 splashDialog.setContentView(splashImageView); splashDialog.setCancelable(false); splashDialog.show();

3.修复安卓手机进入启动页时出现暂时黑屏问题

在路径:platforms\android\app\src\main\res\values 下创建一个xml文件 内容如下:

<?xml version='1.0' encoding='utf-8'?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="Theme.AppStart" parent="android:Theme"> <item name="android:windowBackground">@drawable/screen</item> <item name="android:windowNoTitle">false</item> </style> </resources>

android:windowBackground:启动时的背景图片

在路径:platforms\android\app\src\main\res\drawable 下放入你的背景图片screen

修改 AndroidManifest.xml 文件

文件路径 platforms\android\app\src\main 

修改如下

<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@style/Theme.AppStart" android:windowSoftInputMode="adjustResize"> <intent-filter android:label="@string/launcher_name"> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>

将其中 android:theme下的值修改成@style/Theme.AppStart 表示使用你刚刚创建的主题

至此修改结束

参考资料:

SystemUI Flag详解及使用情景

Android透明状态栏与状态栏文字颜色更改

先黑屏再闪图解决方案(Android、IOS),兼容iPhone X处理示例


最新回复(0)