android 捕獲返回(後退)按鈕事件的兩種方法
第一種方法:
public void onBackPressed() {
//code......
}
第二種方法:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){
//code........
}
return false;
}
兩種方法都定義在activity中,只要在我們自己寫的activity中重寫就可以了,第一種方法是後退按鈕獨有的,第二種方法可以根據不同的keycode來捕捉不同按鈕的點選事件。
補充說明:如果這兩種方法同時使用了,那麼當用戶點選返回按鈕時,程式會先呼叫onKeyDown方法,後呼叫onBackPressed方法
//=======================================================================================
在libgdx中預設對返回按鍵的處理是退出程式, 如果我們希望加一個退出確認框, 那如何截獲返回按鍵呢?
首先要知道InputProcessor
介面, 這個介面定義了很多輸入處理函式,如:
- 按鍵按下
- 點選螢幕
- 拖動
- 等等
InputProcessor使用方式如下:
Gdx.input.setInputProcessor(inputProcessor);
所以我們需要自己實現一個InputProcessor, 然後設定一下就行了.
那麼還有一個問題, Stage實際上已經實現了InputProcessor, 因為他要處理Actor的點選之類的事情. 那麼我們既想保持Stage作出輸入處理類, 又想實現自己對輸入的一些控制怎麼辦呢?
- 繼承Stage,複寫需要變更的方法
- 利用多重輸出處理類InputMultiplexer
InputMultiplexer multiplexer = new InputMultiplexer(); multiplexer.addProcessor(new MyUiInputProcessor()); multiplexer.addProcessor(new MyGameInputProcessor()); Gdx.input.setInputProcessor(multiplexer);
作為我們來講,一個processor設定成stage,一個設定成自己的實現就可以了.
另外我們需要手動設定input截獲返回按鍵
Gdx.input.setCatchBackKey(true);
截獲選單按鍵也是一樣的,如果不手動設定,系統會自己處理掉.
現在複寫InputProcessor的keyUp方法,因為keyDown如果按住不放的話會一直呼叫
@Override public boolean keyUp(int keycode) { //判斷按下的是返回按鍵 if(Input.Keys.BACK == keycode){ //列印一句log Gdx.app.log("s", "back key typed"); //這裡就是推出應用,當然可以定義自己的處理 Gdx.app.exit(); } return false; }
下一個,怎麼在遊戲中保持螢幕喚醒?
在Android專案的主檔案中可以看到初始化的時候用到了AndroidApplicationConfiguration
, 有一個屬性就是是否保持螢幕喚醒useWakelock,設定為true.還有其他一下選項,可以看看api.
但是還有一個重要的東西, Android的很多功能都是需要在配置檔案中申請許可權的, 這個螢幕喚醒也是其中一項:需要在AndroidManifest.xml配置:
這個選項和application同級.
加上這個許可權配置才能真正實現螢幕保持喚醒.
libgdx框架這個類有時候會接收返回的訊息
Lcom/sniper/screen/MenuScreen;