SDL中文论坛

标题: Android下全屏 [打印本页]

作者: ancientcc    时间: 2020-10-14 21:16
标题: Android下全屏
本帖最后由 ancientcc 于 2020-10-14 21:17 编辑

一、当SDLActivity的UI发生改变时,让SDLActivity能监听这些改动
  1. getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(this);
复制代码

this就是SDLActivity。
注:要是不调用这函数,通过“二、设置全屏”可以让app第一次出现全屏。但是,一旦app退到后台,再回到前台,底下的导航条会再次出现。而且一直存在!为此,要通过此个函数和第三步联合发挥作用,使得恢复到前台时,发现有显示导航条,则隐藏它。

二、设置全屏
  1. protected static class SDLCommandHandler extends Handler {
  2.   ...
  3.   int flags = View.SYSTEM_UI_FLAG_FULLSCREEN |
  4.     View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
  5.     View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
  6.     View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
  7.     View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
  8.     View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.INVISIBLE;
  9.   window.getDecorView().setSystemUiVisibility(flags);
  10.   window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
  11.   window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
  12.   SDLActivity.mFullscreenModeActive = true;
  13.   ...
  14. }
复制代码


三、实现View.OnSystemUiVisibilityChangeListener的方法onSystemUiVisibilityChange
  1. public void onSystemUiVisibilityChange(int visibility) {
  2.     if (SDLActivity.mFullscreenModeActive && (visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0 || (visibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0) {

  3.         Handler handler = getWindow().getDecorView().getHandler();
  4.         if (handler != null) {
  5.             handler.removeCallbacks(rehideSystemUi); // Prevent a hide loop.
  6.             handler.postDelayed(rehideSystemUi, 2000);
  7.         }
  8.      }
  9. }
复制代码

当UI发生变动时,会进入此函数。发现当前处于要求全屏,而且NAVIGATION正显示着,则调用rehideSystemUi(SDL自写函数)隐藏它。





欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/) Powered by Discuz! X3.3