我想将onkeylistener添加到我的线性布局中,但它不起作用,这是我的代码。 提前谢谢。
innerlayout.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int arg1, KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode()==KeyEvent.ACTION_DOWN){
Toast.makeText(HomeScreen.this, "down key is working", Toast.LENGTH_LONG).show();
innerlayout.setFocusable(true);
}
return true;
}
});
}
答案 0 :(得分:2)
触摸事件从子节点传递到父节点。如果任何一个孩子消耗偶数(返回true),那么它就会停止;它没有传递给父母。你确定它没有在其他地方消费吗? 检查一下,对于一个动作为true,对于其余动作为false;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
super.onKeyDown(keyCode, event);
if (event.getAction() == KeyEvent.ACTION_DOWN) {
//Toast here
return true;
}
**return false;**
}
另外,发现:
OnKeyListener or OnKeydown not work if children views take the focus
onKeyDown not being called on key press on View
这是你的情况吗?什么是布局的层次结构
答案 1 :(得分:0)
除了使用e.getKeyCode()
之外,你可以直接从int arg1
获取操作的整数值,也可以获得e.getAction()
,并确保执行时return true
ACTION_DOWN
。
试试如下:
@Override
public boolean onKey(View v, int arg1, KeyEvent e) {
// TODO Auto-generated method stub
if(arg1==KeyEvent.ACTION_DOWN){
Toast.makeText(HomeScreen.this, "down key is working", Toast.LENGTH_LONG).show();
innerlayout.setFocusable(true);
return true;
}
return false;
<强>编辑:强>
只有当您使用软键盘执行某些操作时, setOnKeyListener
才会起作用。它不会捕获鼠标指针的任何事件,因为您必须尝试使用鼠标光标,它将始终在模拟器中返回触摸事件。
我建议您为setOnTouchListener
实施LinearLayout
,这将始终响应视图上的触摸事件
尝试以下工作正常。
innerlayout.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
Toast.makeText(MainActivity.this, "down key is working",
Toast.LENGTH_LONG).show();
return true;
} else
return false;
}
});
答案 2 :(得分:0)
放
return false;
代替
return true;
答案 3 :(得分:0)
您几乎拥有了它。您只需将其设置为可聚焦并请求聚焦:
innerlayout.setFocusableInTouchMode(true);
innerlayout.requestFocus();
innerlayout.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int arg1, KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode()==KeyEvent.ACTION_DOWN){
Toast.makeText(HomeScreen.this, "down key is working", Toast.LENGTH_LONG).show();
innerlayout.setFocusable(true);
}
return true;
}
});
}