关键的侦听器不适用于布局



我想在线性布局中添加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;
            }
        });

}

相关内容

  • 没有找到相关文章

最新更新