Battery HD Pro — это идентификатор заряда батареи в вашем смартфоне, он показывает, сколько осталось вашему устройству до полной разрядки. HD батарея красиво оформлена в виде ёмкости с булькающей жидкостью. Цвет жидкости можно менять по вкусу. Данное приложение используется для точного определения жизни батареи по стопроцентной шкале.
Androk Виджеты для андроид 18 августа 2023 Просмотров: 82
Виджет DIGI Clock Plus 3.3.2 (25410) apk [Ru/Multi]
DIGI Clock — отличный способ персонализировать виджет часов на рабочем столе мобильного устройства. Проект предлагается широкий выбор размеров, внешнего вида, цветов, шрифтов, форм и всего прочего, что поможет получить идеально подходящий вариант. Что будет целиком и полностью отвечать запросам самых требовательных людей.
Androk Виджеты для андроид 09 августа 2023 Просмотров: 57
Notification Widget v1.2.133 [Ru/Multi] виджет уведомлений
Весьма удобное приложение-виджет для отображения полученных уведомлений. Поддерживает множество раздельных настроек внешнего вида установленных виджетов. В наличии возможность отображения времени, даты, заряда батареи на установленном виджете. Четко отображает уведомления из верхней панели в виджете с быстрым ответом в разговорах или элементами управления медиаплеером. История уведомлений до 3 дней.
Androk Виджеты для андроид 30 июля 2023 Просмотров: 87
Аналоговые Часы Конструктор v6.07 [Ru/Multi] виджет часов
Минималистичный виджет часов для рабочего стола вашего смартфона. Удобные аналоговые часы с возможностью настройки внешнего вида виджета. Поддерживают озвучивание текущего времени.
Источник: androkk.ru
Использование виджета со списком в приложении
Виджеты (Widgets) — это такие мини-приложения. которые могут быть встроены в главный экран устройства и выводить полезную информацию из самого приложения или даже взаимодействовать с ним, выполняя какие-либо операции. Поэтому виджеты являются очень важной частью приложения, к тому же они удобны в использовании: например, у многих музыкальных плееров есть свой виджет, который позволяет менять треки или ставить их на паузу без запуска приложения.
В ранних версиях Android виджеты могли отображать только такие простые элементы, как TextView, ImageView и так далее. Однако сейчас их возможности стали намного больше, теперь можно использовать и более сложные ListView, GridView и StackView, что позволяет показывать в виджетах больше самой разной информации.
Android TV в 2021 — Так ли хорош Андроид как говорят? Отличия от других смарт ТВ. Фишки и не совсем.
В этой статье мы рассмотрим, как добавить список ListView в виджет и обработать нажатия на его элементы. Делать это будем на примере виджета для приложения Менеджер паролей от Wi-Fi сетей.
Начало работы
Для начала нужно создать XML-файлы разметки и метаданных.
Файл разметки будет определять внешний вид нашего виджета и расположение элементов на нём. В данном случае виджет будет состоят из заголовка с названием приложения и ListView, который будет содержать список активных сетей. Добавим в папку res/layout файл widget_network.xml со следующим кодом:
Поскольку элемент в списке содержит разные данные, для него тоже сделана отдельная разметка в файле widget_list_item.xml, также расположенном в res/layout, которая представляет собой слегка изменённую разметку элемента списка RecyclerView из приложения.
Основными данными для показа здесь являются SSID сети, пароль к ней, дата добавления, а также отметка о том, скрыта сеть или нет. При раскрытии элемента будут отображаться дополнительные кнопки, позволяющие подключиться к сети, скопировать пароль или поделиться данными о ней с другими людьми.
Теперь нужно создать файл с метаданными. Для этого в папке res/xml создадим файл network_widget.xml.
В этом файле мы указываем разметку виджета, которую мы добавили ранее, а также размеры виджета, картинку, которая будет отображаться в списке виджетов, время обновления и возможность менять размер виджета.
Теперь, закончив с внешним видом виджета, можно приступить к реализации работы со списком. Для этого нам понадобится создать 3 класса: WidgetRemoteViewsFactory, WidgetRemoteViewsService, WidgetProvider. Логику их взаимодействия можно описать следующими словами: WidgetProvider при обновлении виджета будет посылать интент в WidgetRemoteViewsService, который будет возвращать обратно экземпляр WidgetRemoteViewsFactory. О том, как это устроено, будет рассмотрено ниже.
Добавление WidgetProvider
Класс WidgetProvider наследует от AppWidgetProvider, его задачей является реализация жизненного цикла виджета. Создадим класс WidgetProvider, содержащий следующий код:
Метод onUpdate() вызывается, когда происходит обновление виджетов, при этом в параметры передаются контекст приложения, объект AppWidgetManager и ID всех виджетов, которые нужно обновить.
Если посмотреть исходный код класса AppWidgetProvider, то можно увидеть, что он наследует от класса BroadcastReceiver, поэтому он может принимать широковещательные сообщения от приложения. Метод onReceive() принимает эти сообщения и обрабатывает их в зависимости от того, что нужно разработчику.
Чтобы провайдер принимал сообщения, нужно зарегистрировать его в манифесте. Для этого в файл AndroidManifect.xml в добавим следующий код:
В указываем, что хотим получать сообщения об обновлении виджета, а в указываем XML-файл с метаданными, который мы создали ранее.
Добавление WidgetRemoteViewsService
Класс WidgetRemoteViewsService выступает посредником между WidgetProvider и WidgetRemoteViewsFactory. Этот сервис должен принимать интент от WidgetProvider и возвращать ему объект WidgetRemoteViewsFactory, который заполняет элемент списка в виджете данными. Создадим класс WidgetRemoteViewsService, наследующий от RemoteViewsService.
Как и любой другой сервис, его нужно зарегистрировать в манифестве приложения. Для этого в файл AndroidManifect.xml внутри добавим следующий код:
Разрешение android.permission.BIND_REMOTEVIEWS позволяет системе привязать сервис с целью добавления представления виджета для каждого элемента и не позволяет другим приложения получать доступ к данным виджета.
Добавление WidgetRemoteViewsFactory
Задачей класса WidgetRemoteViewsFactory является заполнение списка в виджете данными. Иными словами, здесь он выступает как адаптер ListView. Для того, чтобы работать со списком, класс должен реализовывать интерфейс RemoteViewsService.RemoteViewsFactory. Создадим класс WidgetRemoteViewsFactory со следующим кодом:
Метод onCreate() вызывается при создании адаптера, здесь мы инициализируем объект List и формат даты для показа.
Метод onDataSetChanged() вызывается, когда адаптер обновил виджет. В этом методе забираем сети из SharedPreferences и заполняем им ранее инициализированный список.
Метод onDestroy() вызывается при удалении списка, здесь, если требуется, нужно реализовывать логику очистки.
Метод getCount() возвращает количество элементов в списке.
Метод getViewAt() здесь является самым важным, он выполняет заполнение элемента списка данными, затем возвращает в адаптер посредством сервиса готовый объект RemoteViews.
Метод getLoadingView() возвращает специальный объект View, если элементы списка ещё не успели создаться.
Метод getViewTypeCount() возвращает количество типов представлений в ListView. Поскольку представления в списке одинаковые, возвращаем 1.
Метод getItemId() возвращает ID элемента в выбранной позиции.
Метод hasStableIds() возвращает true, если один и тот же ID всегда относится к одному и тому же объекту.
Старт сервиса в WidgetProvider
Теперь нам нужно подключить к нашему провайдеру адаптер. Для этого добавим в метод updateWidget() класса WidgetProvider следующий код:
private void updateWidget(Context context, AppWidgetManager appWidgetManager, int widgetId) < RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_network); setList(views, context, widgetId); appWidgetManager.updateAppWidget(widgetId, views); > private void setList(RemoteViews views, Context context, int widgetId)
Здесь с помощью метода setRemoteAdapter() мы устанавливаем адаптер списка, который подключается к сервису WidgetRemoteViewsService через специальный интент.
Обработка нажатий на элементы списка
Теперь нам нужно сделать так, чтобы, при нажатии на кнопки в списке виджета, выполнялись определённые операции. Сложность здесь состоит в том, что при использовании коллекций не разрешается устанавливать PendingIntent на отдельные элементы. Поэтому воспользуемся методом setPendingIntentTemplate() для установки шаблона PendingIntent в коллекции, а отдельные элементы будут вызываться посредством метода setOnClickFillInIntent().
Для начала в методе updateWidget() класса WidgetProvider создадим шаблон для коллекции, который будет отправлять в onReceive() событие о нажатии.
public static final String ACTION_ON_ITEM_CLICK = «ON_MORE_CLICK»; public static final String COMMAND = «COMMAND»; public static final String MORE = «MORE»; public static final String CONNECT = «CONNECT»; public static final String COPY = «COPY»; public static final String SHARE = «SHARE»; public static final String ITEM = «ITEM»; . private void updateWidget(Context context, AppWidgetManager appWidgetManager, int widgetId) < . final Intent onItemClick = new Intent(context, WidgetProvider.class); onItemClick.setAction(ACTION_ON_ITEM_CLICK); onItemClick.setData(Uri.parse(onItemClick.toUri(Intent.URI_INTENT_SCHEME))); final PendingIntent onClickPendingIntent = PendingIntent.getBroadcast(context, 0, onItemClick, PendingIntent.FLAG_UPDATE_CURRENT); views.setPendingIntentTemplate(R.id.widgetList, onClickPendingIntent); appWidgetManager.updateAppWidget(widgetId, views); >
Затем в классе WidgetRemoteViewsFactory в методе getViewAt() добавим интенты при нажатии на кнопки.
В объект Bundle кроме данных о сети мы также добавляем команду, по которой провайдер будет различать, нажатие на какую кнопку было совершено и какие действия нужно выполнить.
Нажатия на кнопки реализованы, теперь нужно их обработать. Вернёмся в класс WidgetProvider, в метод onReceive() добавим следующий код:
Таким образом мы можем легко обрабатывать нажатия на различные элементы списка.
Обновление виджета из приложения
Осталось малое: посылать в виджет широковещательное сообщение, которое будет запускать обновление при добавлении/удалении элемента из списка в приложении. Для этого в классе WidgetProvider добавим метод sendRefreshBroadcast(), который будет отправлять в onReceive() сообщение об обновлении виджета, что затем вызовет всю цепочку WidgetProvider — WidgetRemoteViewsService — WidgetRemoteViewsFactory — WidgetProvider.
public static void sendRefreshBroadcast(Context context)
Метод этот будем вызывать в классе главной активности в местах, где происходит изменение списка.
WidgetProvider.sendRefreshBroadcast(mainView.getContext());
На этом всё. Результат того, как работает наш виджет, вы можете увидеть ниже.
Источник: android-tools.ru