沉浸式模式 activity 过渡
Immersive mode activity transition
我已经成功将应用程序设置为沉浸模式,因为我想隐藏状态栏(在顶部屏幕)和导航栏(在底部屏幕)。
问题是,当 activity 更改时,底栏会自动出现,然后立即下降并消失。
我想避免这种情况。
所有活动都具有在清单中设置的 AppTheme.NoActionBar 样式:
android:theme="@style/AppTheme.NoActionBar"
并且在OnCreate中都有如下代码:
getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
GlobalFunctions.setFullscreen(getWindow().getDecorView());
}
});
这里是 setFullscreen() 函数:
public static void setFullscreen(View decorView){
int ui_Options = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(ui_Options);
}
我应该在 activity 生命周期的 onCreate 之前设置这些属性吗?或者还有其他解决方案?或者我以错误的方式实现了沉浸式模式?
您不需要设置全局布局侦听器。只需在 super.onCreate()
之前调用 setFullscreen
函数
在清单 activity 标签中使用此代码
android:theme="@style/AppFullScreenTheme"
在 style.xml
中创建此样式
<style name="AppFullScreenTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:fontFamily">@font/montserrat</item>
<item name="android:windowContentOverlay">@null</item>
</style>
否则在您的 activity class
中使用它
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
这对我有用。
我已经成功将应用程序设置为沉浸模式,因为我想隐藏状态栏(在顶部屏幕)和导航栏(在底部屏幕)。 问题是,当 activity 更改时,底栏会自动出现,然后立即下降并消失。 我想避免这种情况。
所有活动都具有在清单中设置的 AppTheme.NoActionBar 样式:
android:theme="@style/AppTheme.NoActionBar"
并且在OnCreate中都有如下代码:
getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
GlobalFunctions.setFullscreen(getWindow().getDecorView());
}
});
这里是 setFullscreen() 函数:
public static void setFullscreen(View decorView){
int ui_Options = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(ui_Options);
}
我应该在 activity 生命周期的 onCreate 之前设置这些属性吗?或者还有其他解决方案?或者我以错误的方式实现了沉浸式模式?
您不需要设置全局布局侦听器。只需在 super.onCreate()
setFullscreen
函数
在清单 activity 标签中使用此代码
android:theme="@style/AppFullScreenTheme"
在 style.xml
中创建此样式 <style name="AppFullScreenTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:fontFamily">@font/montserrat</item>
<item name="android:windowContentOverlay">@null</item>
</style>
否则在您的 activity class
中使用它 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
这对我有用。