Главная » Разработка для Android » Использование RemoteViews внутри обработчика onUpdate из AppWidgetProvider

0

AppWidgetProvider упрощает взаимодействие с вашим виджетом, пере- давая объект AppWidgetManager и массив идентификаторов соответствую- щих виджетов в виде параметров для обработчика  onUpdate.

Вы можете использовать подход, описанный  выше, без необходимо- сти предварительно получать  ссылку  на AppWidgetManager или искать значения идентификаторов для нужных виджетов, как показано в листин- ге 10.7.

Листинг 10.7. Использование RemoteViews  внутри обработчика  onUpdate из AppWidgetProvider

@Override

public void onUpdate(Context context,

AppWidgetManager appWidgetManager, int[] appWidgetIds) {

final int N = appWidgetIds.length;

for (int i = 0; i < N; i++) {

int appWidgetId = appWidgetIds[i];

// Создайте новый объект RemoveViews

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_widget_layout);

// TODO Обновить пользовательский интерфейс.

// Обновите виджет с помощью AppWidgetManager, используя

// измененный объект RemoveViews. appWidgetManager.updateAppWidget(appWidgetId, views);

}

}

Использование RemoteViews для изменения пользовательского интерфейса

Класс RemoteViews  предоставляет различные методы, упрощающие по- лучение  доступа к свойствам  и методам Представлений, что позволяет  из- менять их внешний вид.

С помощью наиболее  универсальных из них можно вызвать  нужный метод из Представления, выполняющегося в другом процессе. Методы  из RemoteViews принимают пары параметр — значение. Поддерживаемые сигнатуры включают в себя параметры для каждого простого типа (Boolean, integer, float, а также строки, растровые изображения и параметры для пути URI).

В листинге  10.8 показан  пример  некоторых  поддерживаемых сигна- тур.

Листинг 10.8. Использование RemoteViews  для изменения пользовательского интерфейса виджета

// Установить значение для свойства ImageView. views.setInt(R.id.widget_image_view, "setImageLevel", 2);

// Показать Курсор в элементе TextView. views.setBoolean(R.id.widget_text_view, "setCursorVisible", true);

// Передать изображения в элемент ImageButton. views.setBitmap(R.id.widget_image_button, "setImageBitmap", myBitmap);

Класс RemoteViews также содержит набор методов, зависящих от конкрет- ного Представления, чтобы устанавливать значения, применимые к определен- ному классу, включая TextView, ImageView, ProgressBar и Chronometer.

В листинге 10.9 показан пример использования некоторых этих специ- фических  методов.

Листинг 10.9. Изменение свойств Представления с помощью RemoteViews

// Обновить TextView views.setTextViewText(R.id.widget_text_view, "Updated Text"); views.setTextColor(R.id.widget_text_view, Color.BLUE);

// Обновить ImageView views.setImageViewBitmap(R.id.widget_image_view, myBitmap);

// Обновить ProgressBar views.setProgressBar(R.id.widget_progressbar, 100, 50, false);

// Обновить Chronometer views.setChronometer(R.id.widget_chronometer, SystemClock.elapsedRealtime(), null, true);

Вы также можете показать или скрыть любое Представление, хранящееся в RemoteViews,  вызвав метод setViewVisibility, как показано ниже:

views.setViewVisibility(R.id.widget_text_view, View.VISIBLE);

Как уже было описано в предыдущем разделе, внося изменения в объект RemoteViews,  вы должны использовать AppWidgetManager, чтобы приме- нить их к конкретному виджету, как показано в следующем фрагменте:

appWidgetManager.updateAppWidget(appWidgetId, views);

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии