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
Android - Adding a key listener to an activity programmatically
提问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);
}