質問

私は、写真/ビデオキャプチャアプリケーションを作成したいと思います。

私は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);
}

時にはそれが動作しない理由は、私のアプリケーションの1のために、この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();を呼び出す必要があります。よりよい解決策がある場合は私に教えてくださいます。

クリック可能な属性だけでなく、ビューが動作するようにonKeyDown(...)メソッドのために有効にされるように設定する必要があります。

さて、APIドキュメントを見ている中で際立っている唯一のものは、Androidがいることです。

あなたはこれを試すことができます。

this.setFocusable(true);

あなたの活動は、キーイベントを食べることができます。活動にonKeyDownメソッドをオーバーライドし、そこにブレークポイントを投げます。

また:あなたが言うとき、あなたはXMLレイアウトを使用するか、あなたのコードでやっている「メインフォームでそれを置く」しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top