我有一个带有按钮的窗口小部件,用户必须在给定间隔内按下按钮。该按钮可以正常工作并重置间隔,但是我希望该按钮根据剩余时间将颜色更改为绿色->琥珀色->红色。我可以使用带有如下代码的远程视图来更改按钮上的文本:
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");
我也尝试过使用可绘制背景并进行更改。我缺少真正明显的东西-一定有可能-我只是找不到适合我的情况的示例。
有人可以指出我吗?
答案 0 :(得分:0)
您可以这样做:
views.setInt(R.id.example_widget_button, "setBackgroundColor", android.graphics.Color.BLACK)`;
然后您将颜色更改为您当时想要的颜色。
答案 1 :(得分:0)
您可以使用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();
}
});