刘海屏幕
对于华为20pro,在设置-->显示-->更多显示设置-->选择 默认(为应用自动匹配顶部显示,尽可能地利用屏幕空间,使内容不被遮挡)
或者选择 隐藏顶部区域(屏幕顶部始终不作为显示区域,会导致竖屏进入刘海区域,横屏不进入刘海区域)
activity隐藏底部虚拟导航(比如华为):
在onResume和onWindowFocusChanged中写入:
@Override
protected void onResume() {
super.onResume();
SystemNavigationUtils.hideSystemNavigationBar(getWindow());
}
@Override
protected void onDestroy() {
AppManager.getAppManager().finishActivity(this);
super.onDestroy();
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus && Build.VERSION.SDK_INT >= 19)
SystemNavigationUtils.hideSystemNavigationBar(getWindow());
}
public static void hideSystemNavigationBar(Window window) {
if (window != null) {
if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {
View view = window.getDecorView();
view.setSystemUiVisibility(View.GONE);
} else {
WindowManager.LayoutParams params = window.getAttributes();
params.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN;
}
}
}
dialog:弹窗,在有底部虚拟导航按钮(在全屏模式中,比如华为:闪烁问题)。
处理办法重写dialog的show方法:
@Override
public void show() {
Window window = getWindow();
if (window != null) {
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
View decor = window.getDecorView();
if (decor != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
} else {
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
}
}
super.show();
window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
} else {
super.show();
}
}
通过清单style设置全屏幕
<style name="FullActivityTheme" parent="AppTheme">
// 全屏设置
<item name="android:windowFullscreen">true</item>
// 无title
<item name="android:windowNoTitle">true</item>
// 半透明状态
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
如果只设置
<style name="FullActivityTheme" parent="AppTheme">
// 全屏设置
<item name="android:windowFullscreen">true</item>
// 无title
<item name="android:windowNoTitle">true</item>
</style>
会发现在刘海屏手机上有一段灰白色区域(action_model_bar-stub:ViewStubComat)位置, xml自己的布局会往下挤一段距离高度。
如果设置上了则该位置为(0,0,0,0),实现了真正意义上的全屏。
为何取名为透明?好奇怪,它的确有实际高度,设置为true了就无实际高度。
网友评论