已知条件:按键手机一个 上有物理按键 左右按键 键值分别为21和22
功能需求1:在某个activity需要上下选择item,因为只有左右按键,无法上下移动,希望可以实现按左键向上(键值19),按右键向下(键值20)
功能需求2:某个activity需要按下左键实现中间确认键(键值23)的功能
备注:一经采纳看实现难度再补偿答题者!
实现按钮监听的实现类,并在实现类中定义标记变量,根据变量值执行不同的方法。12345678910111213141516示例: int flag = 0;//定义标记变量 Button btn = (Button)findViewById(R.id.xxx);//获取按钮 btn.setOnClickListener(new View.OnClickListener() {//点击实现类 @Override public void onClick(View v) { if(flag==0){ //执行方法1(对应功能1) }else if(flag==1){ //执行方法2(对应功能2) }else if(flag==2){ //执行方法3(对应功能3) } flag=(flag+1)%3;//其余得到循环执行上面3个不同的功能 } });
现在你只有键值21 ,22可以监听到,其他它键值属于逻辑上存在的。可以处理成双击左键,或者三击左键来触发其它虚拟键逻辑。
通过监听左键和右键,然后主动触发对应的上键和下键
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode==KeyEvent.KEYCODE_DPAD_LEFT){
onKeyDown(KeyEvent.KEYCODE_DPAD_UP,null);
return true;
} else if (keyCode==KeyEvent.KEYCODE_DPAD_RIGHT) {
onKeyDown(KeyEvent.KEYCODE_DPAD_DOWN,null);
return true;
}
return super.onKeyDown(keyCode, event);
}
按键的监听如下:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// 操作1
if (keyCode == 21) {
// 左键当做上键,处理上键逻辑
} else if (keyCode == 22) {
// 右键当做下键,处理下键逻辑
}
// 操作2
if (keyCode == 21) {
// 左键当做确认键,处理确认键逻辑
}
return true;
}
具体想要的逻辑:
操作1:可以把左键当做上键处理,右键当做下键处理
操作2:左键当中间键处理