Кнопка возврата Android и MediaController - PullRequest
25 голосов
/ 19 мая 2011

Я знаю, как взять под контроль кнопку назад.У меня есть VideoView, встроенный в FrameLayout.Мой вопрос, когда видео всплывает, элементы управления видео присутствуют в течение нескольких секунд.Нажатие кнопки «Назад», когда они видны, скрывает элементы управления видео.Есть ли способ игнорировать эту функцию и выполнить следующее действие «назад», как будто элементы управления видео не были видны?

Причина, по которой я спрашиваю, действительно ли я хочу вернуться, я должен нажать кнопку «Назад»дважды;один раз, чтобы скрыть элементы управления, и второй, чтобы на самом деле вернуться

Ответы [ 3 ]

28 голосов
/ 19 мая 2011

На основании исходного кода это должно работать:

  1. Расширить MediaController (для целей этого ответа назовите его RonnieMediaController)
  2. Переопределить dispatchKeyEvent()в RonnieMediaController
  3. Перед подключением к суперклассу проверьте наличие KeyEvent.KEYCODE_BACK, и, если это произошло, скажите о своей активности finish()
  4. Используйте RonnieMediaController вместо MediaControllerс вашим VideoView

Лично я бы просто оставил это в покое, так как с этим изменением ваш пользователь не сможет заставить RonnieMediaController исчезнуть по требованию.

17 голосов
/ 10 января 2013

Вы можете просто написать:

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

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

Нет необходимости создавать новый класс.

5 голосов
/ 27 января 2016

Вы также можете настроить действие для обработки события:

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...