1、引言
最近项目就要上线了,发现华为等一列手机带底部导航栏。挡着了底部游戏的一些画面,虽然华为可以自由设置。但是还是很不方便,难道用户进入我们的游戏还要再设置一次,这未免太不方便了。为了给用户带去更好的体验,我们打算做到自动隐藏,不用让用户来手动处理!
2、分析
我们知道底部导航栏有时还是比较有用,但有时确实很烦人。比人游戏时我们就要更大限度的利用屏幕给用户带来更好的体验。什么时候隐藏?分为以下几种情况:
- 当打开我们的游戏时,自动隐藏
- 当从后台切回我们的游戏时,自动隐藏
- 当游戏中我们手动滑出导航栏,又没进行操作时,自动隐藏
- 当滑出状态栏时虚拟按键会跟着出来,也要处理让其和状态栏在不操作时自动隐藏
3、解决问题
3.1、找文件
我们首先到找到文件,我的文件位置是:
lua项目目录\Cocos\cocos2d-x\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxActivity.java
3.2、改代码
在如下位置添加两个引用:
上图红色部分代码如下;
import android.annotation.SuppressLint;
import android.view.View;
首先在末尾添加一个隐藏的方法,如图:
详细代码如下:
@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 中调用上面方法:
我么还没有onWindowFocusChanged 方法,先写一个再调用!
详细代码如下:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if( hasFocus ) {
//这里调用
hideNavigationBar();
}
}
下面的两处给出截图:
如果没有我们可以这么写:
@Override
protected void onCreate(Bundle savedInstanceState){
hideNavigationBar();
super.onCreate(savedInstanceState);
}
如果没有我们可以这么写:
@Override
protected void onResume() {
hideNavigationBar();
super.onResume();
Cocos2dxHelper.onResume();
this.mGLSurfaceView.onResume();
}
4、文件下载
到这里,我们的文件已经改好了。没有手动修改的同学可以在这里点击下载。
The End
好了,今天的分享就到这里,如有不足之处,还望大家及时指正,随时欢迎探讨交流!!!