1. 程式人生 > >android 捕獲返回(後退)按鈕事件的兩種方法

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;