2014-02-06 41 views
1

我想添加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

innerviewout的findviewbyid很好吗? – user2450263

+0

是的,这是好的,如果我使用下面的代码,然后其工作正常 –

+0

@NumanAhmad检查我的答案,并相应地尝试。 – GrIsHu

回答

2

触摸事件从孩子传递给家长。如果任何孩子消耗了偶数(返回true),那么它停止;它不会传递给父级。你确定它没有在其他地方消费吗? 检查此,真正的一个动作,假的休息和超级电话:

@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

当我使用这条线返回super.onKeyDown(keyCode,e);它给出了这个方法对于类型对象是未定义的错误。 –

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只会工作,只要你会使用softkeyboard执行某些操作。它不会捕捉鼠标指针的任何事件,因为您必须使用鼠标的光标来尝试,这将始终返回模拟器中的触摸事件。

我建议你实现setOnTouchListenerLinearLayout这将始终响应触摸事件的看法

试试如下其工作的罚款。

 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; 
     } 
    }); 
+0

或(event.getAction()== KeyEvent.ACTION_DOWN) – user2450263

+0

其不工作 –

+0

你能展示一些更多的linearlayout代码吗?你试过用'(e.getAction()== KeyEvent.ACTION_DOWN)' – GrIsHu

0

return false; 

代替

return true; 
+0

什么都没有发生,它不工作。 –