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;




你可能感兴趣的:(Android)