문제

사진/비디오 캡처 응용 프로그램을 만들고 싶습니다.

나는 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 레이아웃을 사용하거나 코드에서 수행하고 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top