[英]I need to change the colour of a button in an android widget
我有一个带有按钮的小部件,用户必须在给定的时间间隔内按下该按钮。 该按钮工作正常并重置间隔,但我希望该按钮根据剩余时间更改颜色为绿色 -> 琥珀色 -> 红色。 我可以使用带有以下代码的远程视图更改按钮上的文本:
RemoteViews views =new RemoteViews(context.getPackageName(), R.layout.example_widget);
views.setCharSequence(R.id.example_widget_button, "setText", buttonText);
但我不能让任何类型的代码改变按钮颜色。 我已经尝试了几件事:
views.setCharSequence(R.id.example_widget_button, "setBackgroundTint", "#039be5");
我也尝试过使用可绘制背景并进行更改。 我遗漏了一些非常明显的东西——这一定是可能的——我只是找不到一个在我的上下文中有效的例子。
有人可以指点我吗?
你可以这样做:
views.setInt(R.id.example_widget_button, "setBackgroundColor", android.graphics.Color.BLACK)`;
并且您将颜色更改为当时您想要的颜色。
您可以使用Handler
或CountDownTimer
。
如果你想使用Handler
,这里是例子:
long totalTime = 10000;
long warningTime = 6000;
long alertTime = 30000;
Runnable warningColorChangeRunnable = new Runnable() {
@Override
public void run() {
button.setBackgroundColor(getResources().getColor(R.color.colorWarning));
}
};
Runnable alertColorChangeRunnable = new Runnable() {
@Override
public void run() {
button.setBackgroundColor(getResources().getColor(R.color.colorAlert));
}
};
final Handler handler = new Handler();
handler.postDelayed(warningColorChangeRunnable, totalTime - warningTime);
handler.postDelayed(alertColorChangeRunnable, totalTime - alertTime);
button.setOnClickListener(new OnClickListener() {
@Override public void onClick(View view) {
handler.removeCallbacks(warningColorChangeRunnable);
handler.removeCallbacks(alertColorChangeRunnable);
}
});
如果要使用CountDownTimer
,示例如下:
long totalTime = 10000;
long warningTime = 6000;
long alertTime = 30000;
long interval = 1000;
CountDownTimer timer = new CountDownTimer(totalTime, 1000) {
public void onTick(long millisUntilFinished) {
if (millisUntilFinished <= warningTime && millisUntilFinished > warningTime - interval) {
button.setBackgroundColor(getResources().getColor(R.color.colorWarning));
}
if (millisUntilFinished <= alertTime && millisUntilFinished > alertTime - interval) {
button.setBackgroundColor(getResources().getColor(R.color.colorAlert));
}
}
public void onFinish() {
// Maybe show a failure dialog
}
}.start();
button.setOnClickListener(new OnClickListener() {
@Override public void onClick(View view) {
timer.cancel();
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.