Cocos 解決華為等安卓機底部帶虛擬導航欄
阿新 • • 發佈:2019-02-01
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
好了,今天的分享就到這裡,如有不足之處,還望大家及時指正,隨時歡迎探討交流!!!