Changer le style d'Android MediaController
-
20-09-2019 - |
Question
Existe-t-il un moyen de personnaliser le MediaController? J'ai besoin de changer le style des boutons, de la barre de recherche, etc.
La solution
La méthode makeControllerView
était censé être remplacé afin que vous puissiez fournir votre propre point de vue. Malheureusement, il est caché pour le moment.
Vous voudrez peut-être prendre la source de MediaController et le réimplémenter ou la copier-et-casson les méthodes cachées dans une sous-classe afin que vous puissiez la personnaliser.
Autres conseils
Ce que vous pouvez faire, c'est reproduire la hiérarchie de la vue de votre média et définir le dessin de Seekbar programmatiquement:
private void styleMediaController(View view) {
if (view instanceof MediaController) {
MediaController v = (MediaController) view;
for(int i = 0; i < v.getChildCount(); i++) {
styleMediaController(v.getChildAt(i));
}
} else
if (view instanceof LinearLayout) {
LinearLayout ll = (LinearLayout) view;
for(int i = 0; i < ll.getChildCount(); i++) {
styleMediaController(ll.getChildAt(i));
}
} else if (view instanceof SeekBar) {
((SeekBar) view).setProgressDrawable(getResources().getDrawable(R.drawable.progressbar));
((SeekBar) view).setThumb(getResources().getDrawable(R.drawable.progresshandle));
}
}
Ensuite, appelez juste
styleMediaController(myMC);
J'ai changé le code de la réponse de BK138 Pour changer la couleur des éléments. Pas les dessinables eux-mêmes. Cette solution est compatible avec les anciens appareils en conjonction avec la bibliothèque de support v4.
private void styleMediaController(View view) {
if (view instanceof MediaController) {
MediaController v = (MediaController) view;
for (int i = 0; i < v.getChildCount(); i++) {
styleMediaController(v.getChildAt(i));
}
} else if (view instanceof LinearLayout) {
LinearLayout ll = (LinearLayout) view;
for (int i = 0; i < ll.getChildCount(); i++) {
styleMediaController(ll.getChildAt(i));
}
} else if (view instanceof SeekBar) {
((SeekBar) view)
.getProgressDrawable()
.mutate()
.setColorFilter(
getResources().getColor(
R.color.MediaPlayerMeterColor),
PorterDuff.Mode.SRC_IN);
Drawable thumb = ((SeekBar) view).getThumb().mutate();
if (thumb instanceof android.support.v4.graphics.drawable.DrawableWrapper) {
//compat mode, requires support library v4
((android.support.v4.graphics.drawable.DrawableWrapper) thumb).setCompatTint(getResources()
.getColor(R.color.MediaPlayerThumbColor));
} else {
//lollipop devices
thumb.setColorFilter(
getResources().getColor(R.color.MediaPlayerThumbColor),
PorterDuff.Mode.SRC_IN);
}
}
}
Ensuite, appelez juste
styleMediaController(myMC);
A dû appeler styleMediaController(myMC)
dans le OnPreparedListener
de la VideoView
pour le faire fonctionner. Sinon, la vue MediaController n'a pas d'enfants.