如何实现硬件按键按下期间的持续响应(而非松开后)
处理Android硬件按键的按下/松开事件
要实现硬件按键按下时执行操作、松开时恢复的效果,你可以通过重写Activity的按键回调方法,或者给View绑定按键监听器来实现,对应你示例中按钮的ACTION_DOWN和ACTION_UP事件:
方式一:重写Activity的全局按键方法
这是监听硬件按键最直接的方式,适用于全局响应按键事件:
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { // 替换为你需要监听的硬件按键码,比如返回键KEYCODE_BACK、音量加KEYCODE_VOLUME_UP if (keyCode == KeyEvent.KEYCODE_BACK) { // 按键按下时执行操作 button.setText("Button Pressed"); return true; // 返回true表示消费该事件,阻止系统默认处理(比如返回键退出页面) } return super.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { // 按键松开时执行操作 button.setText("Start"); return true; } return super.onKeyUp(keyCode, event); }
方式二:给View绑定按键监听器
如果需要让特定View在获取焦点时响应硬件按键,可以使用OnKeyListener:
button.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (event.getAction() == KeyEvent.ACTION_DOWN) { button.setText("Button Pressed"); return true; } else if (event.getAction() == KeyEvent.ACTION_UP) { button.setText("Start"); return true; } } return false; } });
注意事项
- 常用硬件按键码:返回键
KEYCODE_BACK、音量加KEYCODE_VOLUME_UP、音量减KEYCODE_VOLUME_DOWN、主页键KEYCODE_HOME(部分厂商限制监听)。 - 如果不需要拦截系统默认行为,在
onKeyDown/onKeyUp中返回super.onXXX即可。
内容的提问来源于stack exchange,提问作者Erick Pro
相关产品推荐
相关产品推荐

