Главная » Разработка для Android » Добавление интерактивности в виджеты

0

Вы можете добавить интерактивность в виджеты с помощью RemoteViews, но помните, что типы реакций на пользовательский ввод, которые вам будут доступны, строго ограничены.

Поскольку виджеты работают внутри процесса домашнего экрана, они автоматически наследуют его полномочия. В результате  такой политики безопасности  интерактивность виджета тщательно контролируется.

Взаимодействия с виджетом, как правило, ограничены  двумя возмож- ностями:

добавление реакции на нажатие для одного или нескольких Представ- лений внутри разметки;

изменение  пользовательского интерфейса, основанное  на переклю- чении текущего выбора.

Примечательно, что нет стандартных  способов для ввода текста непо- средственно в виджет.

Если вам необходимо получить такую возможность, лучший вариант — добавить  реакцию на событие нажатия,  при которой  отображается Актив- ность, способная принимать пользовательский ввод.

ПРИМЕЧАНИЕ

Один из популярных альтернативных методов — использование элемен- та ImageView, внешний вид которого «подгоняется» под TextView. Фокус ввода можно получить с помощью механизма изображений, зависящих от выбранного состояния. При нажатии на ImageView запускается ча- стично прозрачная Активность, которая принимает текст, вводимый пользователем.

Использование  реакций на нажатие. Наиболее  мощный  способ, что- бы добавить интерактивность в ваш виджет — это использовать метод setOnClickPendingIntent из объекта RemoteViews.

Это позволит указать Ожидающее намерение, которое сработает в момент, когда пользователь нажмет на определенном Представлении, содержащемся в виджете. Ожидающие намерения (более детально описаны в главе 5) могут использоваться для запуска Активностей и Сервисов или трансляции Наме- рений.

В листинге 10.10 показано, как назначить Широковещательное намерение

для элемента TextView  внутри разметки  виджета.

Листинг 10.10. Добавление к виджету реакции на нажатие

Intent intent = new Intent("com.paad.ACTION_WIDGET_CLICK");

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

views.setOnClickPendingIntent(R.id.my_text_view, pendingIntent);

Используя данную методику, можно добавлять  обработчики  нажатий для одного или нескольких Представлений, содержащихся в вашем виджете, что может означать поддержку сразу нескольких  действий.

Например, стандартный виджет для управления медиапроигрывателем назначает  разные Широковещательные намерения для нескольких  элементов, обеспечивая управление проигрыванием посредством кнопок play, pause и next.

Внесение  изменений в ImageView  в зависимости от переключения фокуса. ImageView  — один из наиболее  гибких типов Представлений, до- ступных для использования внутри виджетов. Он предоставляет поддержку некоторых базовых видов взаимодействия с пользователем.

Используя ресурс SelectionStateDrawable (описан в главе 3), вы можете создавать ресурсы Drawable. Данный вид ресурсов позволяет отображать разные изображения, основываясь на состоянии Представления, в которое они переданы. С помощью SelectionStateDrawable можно создавать ди- намический пользовательский интерфейс,  который  выделяет  выбранный пользователем элемент при навигации по виджету.

Отрывок кода в формате  XML из листинга  10.11 показывает  пример простого ресурса SelectionStateDrawable.

Листинг 10.11. Ресурс SelectionStateDrawable для виджета

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_window_focused="false" android:drawable="@drawable/widget_bg_normal"/>

<item android:state_focused="true" android:drawable="@drawable/widget_bg_selected"/>

<item android:state_pressed="true" android:drawable="@drawable/widget_bg_pressed"/>

<item android:drawable="@drawable/widget_bg_normal"/>

</selector>

Ресурсы  Drawable,  упоминающиеся в данном файле, а также сам файл нужно сохранять  в каталоге  приложения res/drawable. Далее вы сможе- те напрямую  использовать SelectionStateDrawable в качестве ресурса для ImageView или в виде фона для любого Представления внутри виджета.

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

По теме:

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