java Android - 以编程方式向活动添加关键侦听器

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13871271/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 14:15:04  来源:igfitidea点击:

Android - Adding a key listener to an activity programmatically

javaandroidandroid-activitykeyeventonkeydown

提问by Dave

All I want to do is programatically add an onKeyDown listener to an existing activity. A little bit of context for what I want to do: I want to make a standalone function that handles click events that occur in a mediaplayer.

我想要做的就是以编程方式向现有活动添加一个 onKeyDown 侦听器。我想要做的事情的一点上下文:我想制作一个独立的函数来处理发生在媒体播放器中的点击事件。

ie: Let's pretend I have this class.

即:让我们假装我有这门课。

public class Main extends Activity
{    
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            setContentView(R.layout.maingui);
    }

@Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         switch (keyCode) {
             case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
        }
        return false;
      }
}

What I would like to do is add a function that adds the onKeyDown Listener through programming.

我想做的是添加一个函数,通过编程添加 onKeyDown 侦听器。

ie:

IE:

    public class Main extends Activity
    {    
    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
                setContentView(R.layout.maingui);

                createListener();
        }

}
public void createListener()
{
    @Override
         public boolean onKeyDown(int keyCode, KeyEvent event) {

             switch (keyCode) {
                 case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
          }
            return false;
    }
}

This obviously doesn't work, but gives you a good idea of what I'm trying to do.

这显然不起作用,但让您对我正在尝试做的事情有一个很好的了解。

This is what I've tried which doesn't work.

这是我尝试过但不起作用的方法。

    public class Main extends Activity
    {    
    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
                setContentView(R.layout.maingui);

            MyKeyClickClass.createListener(this);
    }

}
  • Then Imagine this function in a MyKeyClickClass class

    public static void createListener(Activity act)
        {      
            View testing = act.getWindow().getDecorView().findViewById(android.R.id.content);
    
            testing.setOnKeyListener(new OnKeyListener(){
    
                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    // TODO Auto-generated method stub
    
                    String test = "Hi";
    
                    return false;
                }
            });
        }
    
  • 然后在 MyKeyClickClass 类中想象这个函数

    public static void createListener(Activity act)
        {      
            View testing = act.getWindow().getDecorView().findViewById(android.R.id.content);
    
            testing.setOnKeyListener(new OnKeyListener(){
    
                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    // TODO Auto-generated method stub
    
                    String test = "Hi";
    
                    return false;
                }
            });
        }
    

Is this possibly to do? I'm not getting any response to key events doing it this way.

这可能吗?以这种方式进行的关键事件我没有得到任何回应。

Cheers

干杯

回答by TSL

If for whatever reason you can't just use onKeyDown, couldn't you just have onKeyDown pass its parameters to another function?

如果出于某种原因您不能只使用 onKeyDown,您不能让 onKeyDown 将其参数传递给另一个函数吗?

If you create a myKeyListener class then you can do something like this.

如果你创建一个 myKeyListener 类,那么你可以做这样的事情。

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
     myKeyListener.onKeyDown(keyCode, event);
 }