我需要更改android小部件中按钮的颜色

时间:2020-02-14 17:36:45

标签: android button colors 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");

我也尝试过使用可绘制背景并进行更改。我缺少真正明显的东西-一定有可能-我只是找不到适合我的情况的示例。

有人可以指出我吗?

2 个答案:

答案 0 :(得分:0)

您可以这样做:

views.setInt(R.id.example_widget_button, "setBackgroundColor", android.graphics.Color.BLACK)`;

然后您将颜色更改为您当时想要的颜色。

答案 1 :(得分:0)

您可以使用HandlerCountDownTimer

如果要使用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();
    }
});