加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2d Android 适配华为导航栏

发布时间:2020-12-14 17:11:12 所属栏目:百科 来源:网络整理
导读:华为手机有底部安卓三个按钮的导航栏,可以收起来,如果不进行处理,导航栏收起来后会导致游戏不全屏显示,因为在进入游戏的时候cocos计算屏幕分辨率(不含导航栏),后续不会重复计算 解决方案是在游戏启动的时候强制隐藏底部导航栏,让游戏强制填满整个屏

华为手机有底部安卓三个按钮的导航栏,可以收起来,如果不进行处理,导航栏收起来后会导致游戏不全屏显示,因为在进入游戏的时候cocos计算屏幕分辨率(不含导航栏),后续不会重复计算

解决方案是在游戏启动的时候强制隐藏底部导航栏,让游戏强制填满整个屏幕,或者游戏从后台切进来后也隐藏导航栏

@SuppressLint("NewApi")
public void hideNavigationBar() {
  int uiFlags = 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 // hide nav bar
    | View.SYSTEM_UI_FLAG_FULLSCREEN; // hide status bar


  if( android.os.Build.VERSION.SDK_INT >= 19 ){
    uiFlags |= 0x00001000;  //SYSTEM_UI_FLAG_IMMERSIVE_STICKY: hide navigation bars - compatibility: building API level is lower thatn 19,use magic number directly for higher API target level
  } else {
    uiFlags |= View.SYSTEM_UI_FLAG_LOW_PROFILE;
  }

  getWindow().getDecorView().setSystemUiVisibility(uiFlags);
}

需要在onCreate onResume 和onWindowFocusChanged 中调用上面方法:

protected void onCreate(Bundle savedInstanceState){
    hideNavigationBar();
    super.onCreate(savedInstanceState);
}

@Override
public void onResume() {
    Log.e(TAG,"onResume called");
    hideNavigationBar();
    super.onResume();
    LCMSDK.resume(this);
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus); 
    if( hasFocus ) {
        hideNavigationBar();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读