onkeydown () 문제
-
13-09-2019 - |
문제
사진/비디오 캡처 응용 프로그램을 만들고 싶습니다.
나는 a 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);
내 표면 뷰 서브 클래스의 생성자에서.
다음과 같이 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();
감사해요, Ciryon
또한 내가 사용할 때마다 setContentView(myView);
전화해야합니다 myView.requestFocus();
. 더 나은 솔루션이 있으면 알려주세요.
글쎄, API 문서를 살펴보면 눈에 띄는 유일한 것은 Android : 클릭 가능한 속성을 설정해야한다는 것입니다.
당신은 이것을 시도 할 수 있습니다
this.setFocusable(true);
당신의 활동은 주요 행사를 먹을 수 있습니다. 활동에서 onkeydown을 무시하고 거기에 중단 점을 던지십시오.
또한 : "기본 형식으로 배치"한다고 말할 때 XML 레이아웃을 사용하거나 코드에서 수행하고 있습니까?