2012-11-08 136 views
4

嗨有没有办法改变媒体控制器中文本的颜色,以显示音频文件的总时间和剩余时间。在android 2.3上,时间清晰可见,但是当我的应用程序在android 4.0或4.1上运行时,显示进度条任一侧的时间太黑。 目前我正在扩展mediacontroller类来创建我自己的媒体控制器,它不会消失,有没有我可以添加到这个类的东西? 任何帮助将不胜感激。更改android mediacontroller中文本的颜色

public class WillMediaController extends MediaController { 

    public WillMediaController(Context context) { 
     super(context); 
    } 

    @Override 
    public void hide() { 
     // Do Nothing to show the controller all times 

    } 

    @Override 
    public boolean dispatchKeyEvent(KeyEvent event) 
    { 
     if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) 
     { 
      ((Activity) getContext()).finish(); 

     }else{ 
      super.dispatchKeyEvent(event); 
     } 
     if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN || 
       event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP) { 
      // don't show the controls for volume adjustment 
      return super.dispatchKeyEvent(event); 
     } 
     return true; 


    } 
} 

感谢

回答

13

我有同样的问题。一个好的方法是使用主题来改变颜色。使用ContextThemeWrapper一个主题应用到您的MediaController,例如:

private final class AudioMediaController extends MediaController { 

    private AudioMediaController(Context context) { 
     super(new ContextThemeWrapper(context, R.style.Theme_MusicPlayer)); 
    } 
} 

你的主题可以是这样的:

<resources> 
    <style name="Theme_MusicPlayer"> 
     <item name="android:textColor">#FFFFFF</item> 
    </style> 
</resources> 

将它保存为XML文件到您的RES /值的文件夹。媒体控制器中每个文本的颜色(当前时间为&结束时间)现在变成白色。

+4

这个答案比接受的更好! – ohcibi

+0

梦幻般的答案,如何改变进度栏的颜色 - 默认情况下,它显示为丑陋的明亮黄色! – Jasper

4

这是一种困难的实际。如果您查看source code of MediaController,您会注意到它使用的视图有一个内部ID(例如com.android.internal.R.id.time),您无法轻松访问它。

虽然,您可以尝试使用反射来获取视图实例,然后修改其属性。例如,您可以尝试获取对mEndTime字段的引用,然后更改其文本颜色。例如:

try { 
    Field currentTime = getClass().getDeclaredField("mCurrentTime"); 
    currentTime.setAccessible(true); 
    TextView currentTimeTextView = (TextView) currentTime.get(this); 
    currentTimeTextView.setTextColor(Color.RED); 
} catch (Exception pokemon) { 
} 
+0

感谢您的回复我会试试这个 – Will