的onkeydown()问题
-
13-09-2019 - |
题
我想创建一个照片/视频捕获应用程序。
我创建延伸CaptureView
并把它放在主窗体一个SurfaceView
类。
在主要形式的活动具有其产生菜单onCreateOptionsMenu()
方法。菜单工作得很好,但然后我试图实现一种方法onKeyDown
:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_DOWN) {
switch(keyCode) {
case KeyEvent.KEYCODE_CAMERA:
videoPreview.TakePicture();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
在菜单不会再出现,并且该方法不捕获onKeyDown事件。
有谁知道什么可能是这个问题的原因是什么?
解决方案
我发现我是返回的 true
的所有事件,在这里我只一直在恢复它,我用的代码。让我感动的 if
语句的范围内返回真,返回 false
,否则这把我的菜单回来了!
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
super.onKeyDown(keyCode, event);
if (keyCode == KeyEvent.KEYCODE_BACK) {
dba.close();
Intent result = new Intent("Complete");
setResult(Activity.RESULT_OK, result);
finish();
return true;
}
return false;
}
其他提示
我有类似的问题,并通过添加
解决了它this.requestFocus();
this.setFocusableInTouchMode(true);
在我的SurfaceView子类的构造。
我解决除去if语句,如下所示:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch(keyCode)
{
case KeyEvent.KEYCODE_CAMERA:
videoPreview.TakePicture();
return true;
}
return super.onKeyDown(keyCode, event);
}
我不知道为什么有时不工作,虽然我的应用程序之一这keyDown()
工作正常,并再次当我使用它的一个新的应用程序,然后它不工作。
但是我有一个解决方案,它始终工作:
@Override
public boolean dispatchKeyEvent (KeyEvent event) {
if (event.getAction()==KeyEvent.ACTION_DOWN && event.getKeyCode()==KeyEvent.KEYCODE_BACK) {
Toast.makeText(this, "Back button pressed", Toast.LENGTH_LONG).show();
return true;
}
return false;
}
我通过添加到构造该代码解决了这个:
setFocusable(true);
requestFocus();
感谢,齐尔扬
另外我每次使用setContentView(myView);
我必须调用myView.requestFocus();
时间。如果有更好的解决办法,请告诉我。
那么,在看API文档脱颖而出的唯一的事情是,在android:点击属性必须设置以及为中,onKeyDown(...)方法的工作要启用的视图
。你可以试试这个
this.setFocusable(true);
您的活动可能是吃的关键事件。覆盖的onkeydown在活动,并在那里扔一个断点。
另外:当你说你已经“它放置在主窗体”您使用的是XML布局;或者在你的代码做
?不隶属于 StackOverflow