在android mediacontroller中更改文本的颜色

时间:2012-11-08 00:23:08

标签: android android-mediaplayer mediacontroller

嗨有没有办法改变mediacontroller中文本的颜色,显示音频文件的总时间和剩余时间。在Android 2.3上,时间清晰可见但是当我的应用程序在Android 4.0或4.1上运行时,显示进度条任一侧的时间的文本太暗。 目前我正在扩展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;


    }
}

由于

2 个答案:

答案 0 :(得分: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 / values文件夹中。媒体控制器中每个文本的颜色(当前时间和结束时间)现在都是白色。

答案 1 :(得分:4)

实际上有点困难。如果你看一下source code of MediaController,你会发现它使用的视图有一个内部ID(例如com.android.internal.R.id.time),你无法轻易访问它。

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

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