WatchFace基于日期/时间的颜色

时间:2015-08-01 04:03:42

标签: java android wear-os

我正在尝试创建一个具有AM / PM绘画的WatchFace,我希望根据它是AM还是PM来使用不同的颜色。我还希望将其扩展到本周的日子。

SimpleWatchFace.java

Paint ampmPaint = new Paint();
final SimpleDateFormat amorpm = new SimpleDateFormat("a", Locale.US);
if (amorpm.format(new Date()).equals("AM")) {
    ampmPaint.setColor(Color.RED);
}
else {
    ampmPaint.setColor(Color.GREEN);
}
ampmPaint.setTextSize(context.getResources().getDimension(R.dimen.ampm_size));
ampmPaint.setAntiAlias(true);
ampmPaint.setTextSize(context.getResources().getDimension(R.dimen.ampm_size));
ampmPaint.setAntiAlias(true);

...

public void setAmColor(int color) {
    ampmPaint.setColor(color);
}

public void setPmColor(int color) {
    ampmPaint.setColor(color);
}

SimpleWatchFaceService.java

@Override
public void onAmbientModeChanged(boolean inAmbientMode) {
    super.onAmbientModeChanged(inAmbientMode);
    watchFace.setAntiAlias(!inAmbientMode);

        if(inAmbientMode) {
            watchFace.setPmColor(Color.GRAY);
            watchFace.setAmColor(Color.GRAY);
        }
        else {
            watchFace.setPmColor(Color.GREEN);
            watchFace.setAmColor(Color.RED);
        }
        invalidate();
    }

到目前为止,颜色适用于交互模式,但只要它进入环境模式并返回交互模式,颜色就不起作用,我知道我的代码不起作用。我想知道如何修复我的代码,以便在交互模式下恢复颜色

1 个答案:

答案 0 :(得分:0)

您可以使用u获取星期几(1 =星期一,7 =星期日)。另请注意

if (amorpm.equals("AM")){

将始终返回false,因为您正在检查SimpleDateFormat是否等于String。正确的用法是:

SimpleDateFormat amorpm = new SimpleDateFormat("a", Locale.US);
SimpleDateFormat dayofweek = new SimpleDateFormat("u", Locale.US);
if (amorpm.format(new Date()).equals("AM")) {
    // AM
    ...

和(请注意,您现在可以在switch使用字符串):

switch (dayofweek.format(new Date()) {
    case "1":
        // Monday
        ...

对于环境模式,要检测到您DisplayListener需要this question