繁体   English   中英

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

[英]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)`;

并且您将颜色更改为当时您想要的颜色。

您可以使用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();
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM