2010-01-11 15 views
8

वहाँ MediaController अनुकूलित करने के लिए कोई तरीका है? मुझे बटन, सेकबार इत्यादि की शैली बदलने की जरूरत हैबदलें

+0

यहाँ एक उदाहरण MediaController अनुकूलन है: http://stackoverflow.com/questions/12482203/how-to-create-custom-ui-for-android-mediacontroller/14323144#14323144 – Blago

उत्तर

3

विधि makeControllerView को ओवरराइड करने का मतलब था ताकि आप अपना खुद का विचार दे सकें। दुर्भाग्य से, इस समय यह छिपा हुआ है।

आप MediaController के स्रोत लेने के लिए और या तो यह reimplement या कॉपी और पेस्ट ताकि आप इसे अनुकूलित कर सकते हैं एक उपवर्ग में छिपा तरीकों कर सकते हैं।

+0

'' makeControllerView' के लिए protected' है मैं जिस स्रोत को देख रहा हूं। क्या किसी को पता है कि यह 'निजी' से 'संरक्षित' में बदल गया है? – William

+0

ओह, शायद आप 'android.widget.MediaController' में 'makeControllerView' के लिए javadoc में @hide के बारे में बात कर रहे हैं। हालांकि यह जावाडोक बिट काम करने से '@ ओवरराइड' एनोटेशन को रोकता प्रतीत होता है, लेकिन यह वास्तव में विधि को ओवरराइड करने से रोकता नहीं है। मूल प्रश्न लगभग अपरिवर्तित है - क्या यह कभी निजी था? – William

4

आप क्या कर सकते अपने MediaController को देखते पदानुक्रम recurse और प्रोग्राम के रूप में seekbar के drawable सेट किया गया है: तो फिर

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); 
+0

आपका कोड मेरे लिए काम नहीं करता है। पैरामीटर 'इंडेक्स' का कारण क्या है? 'v.getChildCount()' हर बार 0 देता है। – rekire

+0

@rekire इंडेक्स पैरामीटर की आवश्यकता है क्योंकि फ़ंक्शन को मीडिया कंट्रोलर व्यू के दृश्य पदानुक्रम को अवरुद्ध करते हुए, स्वयं द्वारा बार-बार कहा जाता है। – bk138

+1

लेकिन परिवर्तनीय 'इंडेक्स' का कभी भी उपयोग नहीं किया जाता है। – rekire

1

मैं बदल bk138 के कोड को का जवाब फोन तत्वों के रंग को बदलें। खुद को drawables नहीं। यह समाधान समर्थन पुस्तकालय 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); 

VideoView की OnPreparedListener में styleMediaController(myMC) कॉल करने के लिए यह काम करने के लिए था। अन्यथा MediaController दृश्य में कोई बच्चा नहीं है।

+0

'setCompatTint' क्या है? –

संबंधित मुद्दे