Использование RemoteViews для установки видимости кнопки виджета - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть виджет с одной кнопкой, который я хочу отображать зеленым, янтарным или красным цветом - мне нужно иметь возможность программно переключаться с одного на другой после загрузки виджета. Я испробовал огромное количество разных подходов к этому, но все, что мне когда-либо удавалось, это изменение цвета фона. Подход, который я использую, заключается в том, чтобы иметь кнопку на виджете в трех версиях, но сделать только ту, которую я хочу, видимой. Из-за большого количества беспорядка по этому поводу я создал очень маленькое приложение для проверки только этого, оставив основное приложение в покое, пока у меня не будет ответа.

Код ниже реагирует на нажатие кнопки MainActivity :

 public void green (View view){

    Context context = this;
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
    ComponentName thisWidget = new ComponentName(context, ExampleAppWidgetProvider.class);

    RemoteViews views =new RemoteViews(context.getPackageName(), R.layout.example_widget);
   views.setInt(R.id.button1, "setVisiblity", VISIBLE);
   views.setInt(R.id.button2, "setVisiblity", GONE);
   views.setInt(R.id.button3, "setVisiblity", GONE);
   views.setInt(R.id.example_widget_button, "setBackgroundColor",android.graphics.Color.RED);

    appWidgetManager.updateAppWidget(thisWidget, views);

}

Я знаю, что нажатие кнопки работает, потому что, если я закомментирую строки видимости, кнопка примера переключится на красный фон, поэтому виджет обновляется, но если я включу строки видимости, я get 'Ошибка загрузки виджета'.

Попытка удаленного изменения цвета этой кнопки стала чем-то вроде саги - я пытался изменить оттенки фона и фоновые изображения, но только кажется, что можно изменить фон цвет, который производит довольно уродливый блок на домашнем экране. У меня грустный: O (

1 Ответ

0 голосов
/ 29 февраля 2020
  • Попробуйте ли вы это:

    views.setViewVisibility (R.id.button1, View.GONE);

...