31

戻るボタンを制御する方法を知っています。に がVideoView埋め込まれていFrameLayoutます。私の質問は、ビデオがポップアップすると、ビデオ コントロールが数秒間表示されるということです。ビデオ コントロールが表示されているときに戻るボタンを押すと、ビデオ コントロールが非表示になります。その機能を無視して、ビデオ コントロールが表示されていないかのように次の戻るアクションを実行する方法はありますか?

私が尋ねる理由は、本当に戻りたいのなら、戻るボタンを 2 回押さなければならないからです。1 回目はコントロールを非表示にし、2 回目は実際に戻ります

4

5 に答える 5

33

ソースコードに基づいて、これは機能するはずです:

  1. 拡張MediaController(この回答の目的のために、それを呼び出しますRonnieMediaController
  2. オーバーライドdispatchKeyEvent()_RonnieMediaController
  3. スーパークラスにチェーンする前に、 をチェックしKeyEvent.KEYCODE_BACK、それが見つかった場合は、アクティビティにfinish()
  4. RonnieMediaControllerの代わりに使用MediaControllerしますVideoView

RonnieMediaController個人的には、この変更により、ユーザーはオンデマンドで消えることができないため、そのままにしておきます。

于 2011-05-18T23:29:21.433 に答える
17

あなたは簡単に書くことができます:

mVideoView.setMediaController(new MediaController(this){
        public boolean dispatchKeyEvent(KeyEvent event)
        {
            if (event.getKeyCode() == KeyEvent.KEYCODE_BACK)
                ((Activity) getContext()).finish();

            return super.dispatchKeyEvent(event);
        }
    });

新しいクラスを作成する必要はありません。

于 2013-01-10T13:11:05.550 に答える
6

Activity でイベントを処理することもできます。

mVideoView.setMediaController(new MediaController(this){
    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK ) {
            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                return true;
            } else if (event.getAction() == KeyEvent.ACTION_UP) {
                ((Activity) getContext()).onBackPressed();
                return true;
            }
        }
        return super.dispatchKeyEvent(event);
    }       
});

次に、アクティビティで処理します。

@Override
public void onBackPressed() {
    // clean up or send result here
    finish();
}
于 2016-01-27T18:08:41.253 に答える