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中实现真正的沉浸式全屏需要同时处理状态栏和导航栏。针对您的问题,建议使用以下解决方案:

  1. 在manifest.json中配置:
"fullscreen": true,
"immersive": true
  1. 对于Android原生代码部分,您当前的实现基本正确,但需要注意以下几点:
  • 确保在每次系统UI可见性变化时都重新隐藏导航栏
  • 5+引擎可能会影响全屏效果
  1. 对于plus.nativeUI.showWaiting等原生组件弹出时导航栏重现的问题,可以在组件关闭后手动触发隐藏逻辑:
plus.nativeUI.closeWaiting();
setTimeout(() => {
  sHandler.post(mHideRunnable);
}, 100);
  1. 也可以考虑使用uni-app提供的原生导航栏隐藏API:
uni.hideNavigationBarLoading();
回到顶部