表盘颜色基于 date/time
WatchFace colors based on date/time
我正在尝试创建一个具有 AM/PM 颜色的 WatchFace,我希望根据上午或下午的不同颜色。我还想将其扩展到一周中的几天。
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();
}
到目前为止,颜色在交互模式下有效,但一旦进入环境模式并返回交互模式,颜色就不起作用,而且我知道我的代码不起作用。我想知道如何修复我的代码,以便它在交互模式下返回颜色
您可以使用 u
获取星期几(1 = 星期一,7 = 星期日)。另请注意
if (amorpm.equals("AM")){
将始终 return 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
as per this question。
我正在尝试创建一个具有 AM/PM 颜色的 WatchFace,我希望根据上午或下午的不同颜色。我还想将其扩展到一周中的几天。
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();
}
到目前为止,颜色在交互模式下有效,但一旦进入环境模式并返回交互模式,颜色就不起作用,而且我知道我的代码不起作用。我想知道如何修复我的代码,以便它在交互模式下返回颜色
您可以使用 u
获取星期几(1 = 星期一,7 = 星期日)。另请注意
if (amorpm.equals("AM")){
将始终 return 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
as per this question。