我想在线性布局中添加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;
}
});
}
随着触摸事件从孩子到父母。如果任何孩子都会消耗事件(返回true),则停止;它没有传递给父母。您确定它不会在其他地方消耗吗?检查此操作,其余部分为false and the the and super Call:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
super.onKeyDown(keyCode, event);
if (event.getAction() == KeyEvent.ACTION_DOWN) {
//Toast here
return true;
}
**return false;**
}
也发现:
如果儿童观点将重点放在
的情况下onkeydown在键上未被调用,请注意
这是你的情况吗?布局的层次结构是什么
put
return false;
而不是
return true;
除了使用e.getKeyCode()
之外,您还可以直接从int arg1
获取操作的整数值,并且还可以作为e.getAction()
获得,并且还确保您执行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
只有在您使用软键执行一些操作时才能使用。它不会捕获鼠标指针的任何事件,因为您必须使用鼠标的光标尝试,该光标将始终在模拟器中返回触摸事件。
我建议您为LinearLayout
实施setOnTouchListener
,该CC_7总是会响应视图上的触摸事件
在工作正常的下方尝试。
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;
}
});
您几乎拥有它。您只需要将其设置为可重点并要求重点:
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;
}
});
}