在安卓媒体控制器中更改文本颜色

4

你好,请问有没有办法修改媒体控制器中音频文件总时间和剩余时间显示的文本颜色?在安卓2.3版本中,这些时间完全可见,但是当我的应用在安卓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个回答

13

我曾经遇到同样的问题。一个好的解决方法是使用主题(theme)来改变颜色。使用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文件夹中。媒体控制器(当前时间和结束时间)中每个文本的颜色现在是白色。


太棒了,如何更改进度条的颜色 - 默认情况下它看起来很丑的亮黄色! - Jasper

4
这实际上有点困难。如果你查看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) {
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接