Android监听组合键

package com.fuwei.action;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;

public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   onClickView();
}

@Override
protected void onRestart() {
   // TODO Auto-generated method stub
   Toast.makeText(this, "Home", 1);
   super.onRestart();
}

public void onClickView() {
   TextView textView = (TextView) findViewById(R.id.linear);
   textView.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
     v.setBackgroundColor(0xFF00FF00);
    }
   });
}

// @Override
// public boolean onKeyDown(int keyCode, KeyEvent event) {
// // TODO Auto-generated method stub
// if(!event.isAltPressed()&&keyCode == KeyEvent.KEYCODE_A){
// Toast.makeText(Main.this, "ALT + A", 0).show();
// }
// return super.onKeyDown(keyCode, event);
// }

// @Override
// public boolean dispatchKeyEvent(KeyEvent event) {
// // TODO Auto-generated method stub
// //Alt Shift System 等键可以用is....判断是否为按下状态
// if(event.isAltPressed()&&event.getKeyCode() == KeyEvent.KEYCODE_A){
// Toast.makeText(Main.this, "ALT + A", 0).show();
// }
// return super.dispatchKeyEvent(event);
// }

boolean aIsDown = false;
boolean qIsDown = false;

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
   // TODO Auto-generated method stub
   // 判断普通按键
   int keyCode = event.getKeyCode();
   if (keyCode == KeyEvent.KEYCODE_A
     && event.getAction() == KeyEvent.ACTION_DOWN) {
    aIsDown = true;
   } else if (keyCode == KeyEvent.KEYCODE_Q
     && event.getAction() == KeyEvent.ACTION_DOWN) {
    qIsDown = true;
   }else if((keyCode == KeyEvent.KEYCODE_Q && !aIsDown)||(keyCode == KeyEvent.KEYCODE_A && !qIsDown)){
    aIsDown = false;
    qIsDown = false;
   }else if (aIsDown
     && qIsDown
     && (keyCode == KeyEvent.KEYCODE_Q || keyCode == KeyEvent.KEYCODE_A)
     && event.getAction() == KeyEvent.ACTION_UP) {
    Toast.makeText(Main.this, "Q + A", 0).show();
    aIsDown = false;
    qIsDown = false;
   }else{
    aIsDown = false;
    qIsDown = false;
   }
   return super.dispatchKeyEvent(event);
}
}

本文章在网上有很多,但是在监听组合键时都存在一些严重的bug,以上是本人经过修改后的代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值