Bouton de retour Android et MediaController
Je sais comment prendre le contrôle du bouton Retour. J'ai un VideoView
incorporé dans un FrameLayout
. Ma question est quand la vidéo apparaît, les contrôles vidéo sont présents pendant quelques secondes. Appuyer sur le bouton de retour alors qu'ils sont visibles Cache Les commandes vidéo. Existe-t-il un moyen d'ignorer cette fonction et de faire l'action suivante comme si les contrôles vidéo n'étaient pas visibles?
La raison pour laquelle je demande est si je veux vraiment revenir en arrière, je dois appuyer deux fois sur le bouton Retour; Une fois pour cacher les contrôles et la seconde pour revenir en arrière
3 réponses
, Basé sur le code source, cela devrait fonctionner:
- étendre
MediaController
(aux fins de cette réponse, appelez-laRonnieMediaController
) - Remplacer
dispatchKeyEvent()
dansRonnieMediaController
- avant d'enchaîner à la superclasse, Vérifiez
KeyEvent.KEYCODE_BACK
, et si cela est rencontré, dites à votre activitéfinish()
- Utiliser
RonnieMediaController
au lieu deMediaController
votreVideoView
Personnellement, je le laisserais tranquille, car avec ce changement, votre utilisateur ne peut pas faire disparaître un RonnieMediaController
à la demande.
, Vous pouvez simplement écrire:
mVideoView.setMediaController(new MediaController(this){
public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK)
((Activity) getContext()).finish();
return super.dispatchKeyEvent(event);
}
});
Pas besoin de créer une nouvelle classe.
Vous pouvez également avoir l'activité gérer l'événement:
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);
}
});
Ensuite, gérez-le dans votre activité:
@Override
public void onBackPressed() {
// clean up or send result here
finish();
}