uni-app 设置fullscreen为true时仅状态栏隐藏 导航栏仍显示
uni-app 设置fullscreen为true时仅状态栏隐藏 导航栏仍显示
详细问题描述
设置fullscreen为true只有状态栏隐藏,导航栏显示,不知道官方的沉浸式代码如何写的。
自己写了隐藏代码,可是例如
plus.nativeUI.showWaiting("正在处理...");
//弹出系统组件时底部的导航栏就会弹出
private static Handler sHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
//隐藏操作菜单
sHandler = new Handler();
sHandler.post(mHideRunnable); // hide the navigation bar
final View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener(){
@Override
public void onSystemUiVisibilityChange(int visibility){
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
//现在系统状态栏,导航栏处于显示状态。
Log.e("屏幕", "导航栏处于显示状态");
sHandler.post(mHideRunnable); // hide the navigation bar
}else {
//系统状态栏,导航栏处于 消失 状态
Log.e("屏幕", "导航栏处于消失状态");
}
}
});
if (mEntryProxy == null) {
FrameLayout f = new FrameLayout(this);
// 创建5+内核运行事件监听
WebappModeListener wm = new WebappModeListener(this, f);
// 初始化5+内核
mEntryProxy = EntryProxy.init(this, wm);
// 启动5+内核
mEntryProxy.onCreate(this, savedInstanceState, SDK.IntegratedMode.WEBAPP, null);
setContentView(f);
}
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
sHandler.post(mHideRunnable);
}
}
Runnable mHideRunnable = new Runnable() {
@Override
public void run() {
int flags;
int curApiVersion = android.os.Build.VERSION.SDK_INT;
// This work only for android 4.4+
if(curApiVersion >= Build.VERSION_CODES.KITKAT){
// This work only for android 4.4+
// hide navigation bar permanently in android activity
// touch the screen, the navigation bar will not show
flags = 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;
}else{
// touch the screen, the navigation bar will show
flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
}
// must be executed in main thread :)
getWindow().getDecorView().setSystemUiVisibility(flags);
}
};
运行环境
安卓4.4.2
更多关于uni-app 设置fullscreen为true时仅状态栏隐藏 导航栏仍显示的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
确实是 只对状态通知栏进行操作,设置全屏也只是操作通知栏。
更多关于uni-app 设置fullscreen为true时仅状态栏隐藏 导航栏仍显示的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我想知道如何监听弹窗?还有不知道为什么监听到了不是全屏的时候(弹窗的时候),然后动态设置全屏不生效,必须是弹窗消息才生效变为全屏。我想知道你们是如何动态设置状态来隐藏的。
在uni-app中实现真正的沉浸式全屏需要同时处理状态栏和导航栏。针对您的问题,建议使用以下解决方案:
- 在manifest.json中配置:
"fullscreen": true,
"immersive": true
- 对于Android原生代码部分,您当前的实现基本正确,但需要注意以下几点:
- 确保在每次系统UI可见性变化时都重新隐藏导航栏
- 5+引擎可能会影响全屏效果
- 对于plus.nativeUI.showWaiting等原生组件弹出时导航栏重现的问题,可以在组件关闭后手动触发隐藏逻辑:
plus.nativeUI.closeWaiting();
setTimeout(() => {
sHandler.post(mHideRunnable);
}, 100);
- 也可以考虑使用uni-app提供的原生导航栏隐藏API:
uni.hideNavigationBarLoading();