存在于 Android < 12 时,SplashScreen 不是全屏
SplashScreen not full screen when exist on Android < 12
我有一个带有白色状态栏和导航栏的应用程序。我定义了一个这样的 Splash 主题。
<style name="Theme.MySplash" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">#00f</item>
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_baseline_play_arrow_24</item>
<item name="windowSplashScreenAnimationDuration">200</item>
<item name="postSplashScreenTheme">@style/Theme.AppTheme</item>
</style>
<style name="Theme.AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="android:statusBarColor">#fff</item>
<item name="android:navigationBarColor">#fff</item>
</style>
MainActivity
class MainActivity : AppCompatActivity() {
var keepSplashScreen = true
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val splashScreen = installSplashScreen()
splashScreen.setOnExitAnimationListener { splashScreenProvider ->
val fadeAnim = ObjectAnimator.ofFloat(
splashScreenProvider.view, View.ALPHA, 1f, 0f
)
fadeAnim.duration = 4000L
fadeAnim.interpolator = AccelerateInterpolator()
fadeAnim.doOnEnd { splashScreenProvider.remove() }
fadeAnim.start()
}
splashScreen.setKeepVisibleCondition { keepSplashScreen }
setContentView(R.layout.activity_main)
Handler(Looper.getMainLooper()).postDelayed({
keepSplashScreen = false
}, 3000)
}
}
SplashTheme
在设备 Android 12 (Pixel 4XL) 上运行良好,但在 Android 8 (Xiomi A2) 上,SplashTheme
无法全屏显示它存在。
从该视频中,当 SplashScreen
开始存在时(淡入淡出动画),显示白色状态栏和导航栏(在 Android 12 上,SplashScreen
存在时始终全屏) .
如何让 SplashScreen
在 Android < 12 时始终全屏显示?
试试这个:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
将其写在您的 onCreate
方法中。更多信息,Read this.
我觉得问题可能是你没有使用compact库。如果您不使用支持库,您的启动画面在较低版本中的外观将与以前完全相同。
implementation 'androidx.core:core-splashscreen:1.0.0-alpha01'
SplashScreen 实际上使用了包含图像视图的框架布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false">
<ImageView
android:id="@+id/splashscreen_icon_view"
android:layout_width="?attr/splashScreenIconSize"
android:layout_height="?attr/splashScreenIconSize"
android:layout_gravity="center"/>
</FrameLayout>
我有一个带有白色状态栏和导航栏的应用程序。我定义了一个这样的 Splash 主题。
<style name="Theme.MySplash" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">#00f</item>
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_baseline_play_arrow_24</item>
<item name="windowSplashScreenAnimationDuration">200</item>
<item name="postSplashScreenTheme">@style/Theme.AppTheme</item>
</style>
<style name="Theme.AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="android:statusBarColor">#fff</item>
<item name="android:navigationBarColor">#fff</item>
</style>
MainActivity
class MainActivity : AppCompatActivity() {
var keepSplashScreen = true
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val splashScreen = installSplashScreen()
splashScreen.setOnExitAnimationListener { splashScreenProvider ->
val fadeAnim = ObjectAnimator.ofFloat(
splashScreenProvider.view, View.ALPHA, 1f, 0f
)
fadeAnim.duration = 4000L
fadeAnim.interpolator = AccelerateInterpolator()
fadeAnim.doOnEnd { splashScreenProvider.remove() }
fadeAnim.start()
}
splashScreen.setKeepVisibleCondition { keepSplashScreen }
setContentView(R.layout.activity_main)
Handler(Looper.getMainLooper()).postDelayed({
keepSplashScreen = false
}, 3000)
}
}
SplashTheme
在设备 Android 12 (Pixel 4XL) 上运行良好,但在 Android 8 (Xiomi A2) 上,SplashTheme
无法全屏显示它存在。
从该视频中,当 SplashScreen
开始存在时(淡入淡出动画),显示白色状态栏和导航栏(在 Android 12 上,SplashScreen
存在时始终全屏) .
如何让 SplashScreen
在 Android < 12 时始终全屏显示?
试试这个:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
将其写在您的 onCreate
方法中。更多信息,Read this.
我觉得问题可能是你没有使用compact库。如果您不使用支持库,您的启动画面在较低版本中的外观将与以前完全相同。
implementation 'androidx.core:core-splashscreen:1.0.0-alpha01'
SplashScreen 实际上使用了包含图像视图的框架布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false">
<ImageView
android:id="@+id/splashscreen_icon_view"
android:layout_width="?attr/splashScreenIconSize"
android:layout_height="?attr/splashScreenIconSize"
android:layout_gravity="center"/>
</FrameLayout>