Создайте виджет цены биткойна с кнопкой обновления
Прошло много времени с моего последнего поста. На этот раз я здесь, чтобы представить вам Jetpack Glance для виджетов приложений. Давайте начнем.
Jetpack Glance — это фреймворк стиля компоновки, который позволяет разрабатывать удаленные представления для Android.
Вы можете создавать модные, современные и ответственные виджеты приложений с минимальным кодом и декларативным API Kotlin.
Jetpack Glance все еще находится в альфа-версии с версией 1.0.0-alpha01.
Чтобы добавить Glance в свой проект, вам нужно добавить Google Maven и зависимость в файл build.gradle
.
Вам может быть интересно, что Glance работает? Всего в нескольких предложениях он обеспечивает совместимость представления компоновки с удаленными представлениями. Обратите внимание, что у Glance есть собственный набор составных элементов, несовместимых с androidx.compose
.
Хотя собственный набор компонентов Glance еще не включает в себя все компоненты Jetpack Compose. Думаю, что они появятся и в дальнейших стабильных релизах. Ладно, тогда давайте попотеем!
Выполнение
На этом этапе я начну объяснять, как шаг за шагом создать виджет биткойнов с реализацией кода. Идея этого биткойн-виджета состоит в том, чтобы позволить пользователю просматривать ежедневные изменения цены биткойнов.
Кроме того, они могут нажать кнопку обновления, чтобы получить последнее значение из локального источника данных. Я сказал локальный источник, так как мы помещаем последнее значение в локальный, если оно не просрочено.
1. Создайте AppWidgetProvider в XML
Для начала создайте XML виджета приложения в resources.
Этот файл XML является вашим идентификатором конкретного виджета. Вы можете добавить в него основные атрибуты, такие как minWidth
, minHeight
и updateFrequency
и т. д. Дополнительные атрибуты можно найти в официальной документации Android.
2. Создайте подкласс GlanceAppWidget
Это наш уровень пользовательского интерфейса, который взаимодействует с AppWidgetManager
.
Когда вы вызовете его метод update
, будет запущена композиция, и составные представления будут переведены в RemoteViews
.
Для композиции вам необходимо переопределить методы Content
, как показано ниже:
3. Создайте компонуемый вид вашего виджета
Между прочим, я разделил окно создания на другой файл BitcoinWidget.kt
, как показано ниже:
3. Создайте подкласс GlanceAppWidgetReceiver
GlanceAppWidgetReceiver
— это класс, производный от AppWidgetProvider
, для создания удаленных представлений.
Вам нужно переопределить атрибут glanceAppWidget
, чтобы создать приемник виджета.
В вышеупомянутом классе MarketWidgetReceiver
происходит много всего.
- Метод
onUpdate
будет вызываться при первом появлении виджета на вашем экране. - Существует также функция
observeData
, называемая методомonUpdate
. МетодobserveData
запускает сопрограмму для получения данных из локального. Получив последние данные о цене биткойнов, мы будем использоватьupdateAppWidgetState
для отображения последних значений изPreferences
и вызывать метод updateGlanceAppWidget
для обновления представления. - Но для обновления виджета нам нужен способ прослушивания широковещательных событий. Именно здесь на сцену выходит метод
onReceive
с новой трансляцией действийMarketRefreshCallback
.
4. Создайте составной пользовательский интерфейс для обновления виджета
Прежде чем мы перейдем к реализации класса обратного вызова, давайте создадим представление BitcoinWidgetHeader
, состоящее из кнопки обновления (которая в конечном итоге вызовет обратный вызов):
Приведенный выше код говорит сам за себя.
5. Настройте ActionCallBack для виджета приложения.
Теперь давайте создадим файл ActionCallback
. Поскольку мы хотим обновить виджет при нажатии кнопки, мы создали ActionCallback
и переопределили метод onRun
.
Внутри метода onRun
мы создали намерение sendBroadcast
. Эта трансляция сообщит методу onReceive
MarketWidgetReceiver
. В конце концов, мы получаем эту трансляцию через намерение и наблюдаем за нашими последними данными.
6. Обновите файл AndroidManifest.xml.
Затем обновите файл Manifest
, добавив класс MarketWidgetReceiver
. И не забудьте добавить поставщика виджета приложения, как показано ниже:
Вот окончательный предварительный просмотр со всеми функциями в действии: