Изменить стиль android MediaController

Есть ли способ настроить MediaController? Мне нужно изменить стиль кнопок, SeekBar и т. Д.

Solutions Collecting From Web of "Изменить стиль android MediaController"

Метод makeControllerView должен был быть переопределен, чтобы вы могли предоставить свой собственный вид. К сожалению, сейчас он скрыт.

Возможно, вы захотите взять источник MediaController и либо переопределить его, либо скопировать и вставить скрытые методы в подкласс, чтобы вы могли его настроить.

Что вы можете сделать, это перезаписать иерархию представлений вашего MediaController и программно запрограммировать программу SeekBar:

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

Затем просто позвоните

 styleMediaController(myMC); 

Я изменил код ответа bk138, чтобы просто изменить цвет элементов. Не сами чертежи. Это решение совместимо со старыми устройствами в сочетании с библиотекой поддержки 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); } } } 

Затем просто позвоните

 styleMediaController(myMC); 

Пришлось вызвать styleMediaController(myMC) в OnPreparedListener VideoView чтобы он работал. В противном случае в представлении MediaController нет дочерних элементов.