Мне нужно изменить цвет кнопки в виджете android - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть виджет с кнопкой, которую пользователи должны нажимать в течение заданного интервала. Кнопка работает нормально и сбрасывает интервал, но я хочу, чтобы кнопка меняла цвет на зеленый -> желтый -> красный в зависимости от оставшегося времени. У меня нет проблем с изменением текста на кнопке с помощью удаленных представлений с кодом, подобным следующему:

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 голосов
/ 14 февраля 2020

Вы можете использовать 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();
    }
});
0 голосов
/ 14 февраля 2020

Вы можете сделать это:

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

, и вы измените цвет на желаемый в то время.

...