Как редактировать виджет андроид

Полный список

— создаем простой виджет
— разбираемся в его Lifecycle

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

Для понимания темы виджетов желательно знать, что такое BroadcastReceiver. Я о нем упоминал в Уроках 96 и 100. Это просто слушатель, который регистрируется в системе, ловит с помощью настроенного Intent Filter сообщения (Intent) и выполняет какой-либо код. Почему-то не сделал я отдельного урока по нему. Но, думаю, еще сделаю. Есть там свои интересные особенности, о которых можно поговорить.

Думаю, нет особой необходимости подробно объяснять, что такое виджеты. Все их видели на своих девайсах. Это что-то типа мини-приложений расположенных на рабочем столе (Home). Они позволяют просмотреть какую-либо информацию из основных приложений, либо повлиять на поведение этих приложений. В качестве примера можно привести – прогноз погоды, текущее время, баланс какого-либо счета, список сообщений в различных мессенджерах, управление состоянием WiFi/3G/GPS/Bluetooth, яркость экрана и т.д. и т.п. В этом уроке сделаем простейший виджет, который отобразит статичный текст.

Чтобы создать простейший виджет нам понадобятся три детали:

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

2) XML-файл c метаданными

В нем задаются различные характеристики виджета. Мы пока что укажем следующие параметры:

— layout-файл (из п.1.), чтобы виджет знал, как он будет выглядеть
— размер виджета, чтобы виджет знал, сколько места он должен занять на экране
— интервал обновления, чтобы система знала, как часто ей надо будет обновлять виджет

3) Класс, наследующий AppWidgetProvider. В этом классе нам надо будет реализовать Lifecycle методы виджета.

Давайте создадим три этих детали. Activity нам не понадобится, поэтому не забудьте убрать галку Create Activity в визарде создания нового проекта

Создадим проект без Activity:

Project name: P1171_SimpleWidget
Build Target: Android 2.3.3
Application name: SimpleWidget
Package name: ru.startandroid.develop.p1171simplewidget

Добавим строки в strings.xml:

Создаем layout-файл widget.xml:

RelativeLayout, а внутри зеленый TextView с текстом по центру. Т.е. виджет просто будет показывать текст на зеленом фоне.

Создаем файл метаданных res/xml/widget_metadata.xml:

В атрибуте initialLayout указываем layout-файл для виджета.

Атрибуты minHeight и minWidth содержат минимальные размеры виджета по высоте и ширине.

Есть определенный алгоритм расчета этих цифр. Как вы наверняка замечали, при размещении виджета, экран делится на ячейки, и виджет занимает одну или несколько из этих ячеек по ширине и высоте. Чтобы конвертнуть ячейки в dp, используется формула 70 * n – 30, где n – это количество ячеек. Т.е. если мы, например, хотим, чтобы наш виджет занимал 2 ячейки в ширину и 1 в высоту, мы высчитываем ширину = 70 * 2 – 30 = 110 и высоту = 70 * 1 – 30 = 40. Эти полученные значения и будем использовать в атрибутах minWidth и minHeight.

Атрибут updatePeriodMillis содержит количество миллисекунд. Это интервал обновления виджета. Насколько я понял хелп, указать мы тут можем хоть 5 секунд, но чаще, чем раз в 30 минут (1 800 000) виджет обновляться все равно не будет — это системное ограничение. Давайте пока что поставим интервал 40 минут (2 400 000). В следующих уроках мы разберемся, как самим обновлять виджет с необходимым интервалом.

Осталось создать класс, наследующий AppWidgetProvider.

onEnabled вызывается системой при создании первого экземпляра виджета (мы ведь можем добавить в Home несколько экземпляров одного и того же виджета).

onUpdate вызывается при обновлении виджета. На вход, кроме контекста, метод получает объект AppWidgetManager и список ID экземпляров виджетов, которые обновляются. Именно этот метод обычно содержит код, который обновляет содержимое виджета. Для этого нам нужен будет AppWidgetManager, который мы получаем на вход.

onDeleted вызывается при удалении каждого экземпляра виджета. На вход, кроме контекста, метод получает список ID экземпляров виджетов, которые удаляются.

Читайте также:  Андроид доступ через wifi

onDisabled вызывается при удалении последнего экземпляра виджета.

Во всех методах выводим в лог одноименный текст и список ID для onUpdate и onDeleted.

Повторюсь — в onUpdate мы, по идее, должны накодить какое-то обновление виджета. Т.е. если наш виджет отображает, например, текущее время, то при очередном обновлении (вызове onUpdate) надо получать текущее время и передавать эту инфу в виджет для отображения. В этом уроке мы пока не будем с этим возиться.

Осталось немного подрисовать манифест. Добавьте туда ваш класс как Receiver

— укажите для него свои label и icon. Этот текст и эту иконку вы увидите в списке выбираемых виджетов, когда будете добавлять виджет на экран.

— настройте для него фильтр с action = android.appwidget.action.APPWIDGET_UPDATE

— добавьте метаданные с именем android.appwidget.provider и указанием файла метаданных xml/widget_metadata.xml в качестве ресурса

После этого секция receiver в манифесте должна получиться примерно такая:

Виджет готов. Все сохраняем и запускаем. Никаких Activity, разумеется, не всплывет. В консоли должен появиться текст:

\P1171_SimpleWidget\bin\P1171_SimpleWidget.apk installed on device
Done!

Открываем диалог создания виджета и видим в списке наш виджет с иконкой и текстом, которые мы указывали в манифесте для receiver.

Выбираем его и добавляем на экран.

Виджет появился, смотрим логи.

onEnabled
onUpdate [8]

Сработал onEnabled, т.к. мы добавили первый экземпляр виджета. И сразу после добавления, сработал метод onUpdate для этого экземпляра. Видим, что ему назначен (У вас, скорее всего, будет другой ID). Т.е. система добавила экземпляр виджета на экран и вызвала метод обновления с указанием ID экземпляра.

Добавим еще один экземпляр

onEnabled не сработал, т.к. добавляемый экземпляр виджета уже не первый. onUpdate же снова отработал для нового добавленного экземпляра и получил на вход >

Теперь давайте удалим с экрана два этих экземпляра виджета. Сначала второй. В логах увидим:

Сработал onDeleted и получил на вход ID удаляемого экземпляра виджета.

Удаляем первый экземпляр. В логах:

onDeleted [8]
onDisabled

Снова сработал onDeleted — нас оповестили, что экземпляр виджета с был удален. И сработал onDisabled, т.е. был удален последний экземпляр виджета, больше работающих экземпляров не осталось.

Наш виджет обновляется (получает вызов метода onUpdate) раз в 40 минут. Если кому не лень, добавьте снова пару виджетов на экран и подождите. Когда они снова обновятся, в логах это отразится.

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

BroadcastReceiver

Класс AppWidgetProvider является расширением класса BroadcastReceiver (в манифесте мы его и прописали как Receiver). Он просто получает от системы сообщение в onReceive, определяет по значениям из Intent, какое именно событие произошло (добавление, удаление или обновление виджета), и вызывает соответствующий метод (onEnabled, onUpdate и пр.).

В манифесте мы для нашего Receiver-класса настроили фильтр с action, который ловит события update. Каким же образом этот Receiver ловит остальные события (например, удаление)? Хелп пишет об этом так:

Т.е. ACTION_APPWIDGET_UPDATE – это единственный action, который необходимо прописать явно. Остальные события AppWidgetManager каким-то образом сам доставит до нашего AppWidgetProvider-наследника.

Отступы

Если мы расположим рядом несколько экземпляров виджета, увидим следующую картину

Не очень приятное зрелище. Надо бы сделать отступ.

Добавим android:padding=»8dp» к RelativeLayout в нашем layout-файле

Виджеты на экране поменялись автоматически и теперь выглядят более пристойно.

Кстати, для них сработал onUpdate, смотрите логи. В метод был передан массив ID всех работающих экземпляров виджета.

В Android 4.0 (API Level 14) и выше этот недостаток с отступами был устранен, и вручную делать отступы больше не надо. Давайте проверим. Уберите ранее добавленный в RelativeLayout отступ. И укажите в манифесте android:targetSdkVersion версию 14 (или выше), чтобы система знала, что можно использовать стандартные возможности, а не режим совместимости.

Все сохраняем, запускаем наш виджет на эмуляторе с 4.1. Добавим три экземпляра.

Система сама делает отступы между виджетами.

Получается для версий, ниже 4 надо делать отступ в layout, а для старших версий не надо. Хелп дает подсказку, как сделать так, чтобы ваш виджет корректно работал на всех версиях. Для этого используются квалификаторы версий.

Читайте также:  Как сделать чтобы андроид сам не звонил кому то

В layout для RelativeLayuot указываете:

И создаете два файла.

res/values/dimens.xml с записью:

и res/values-v14/dimens.xml с записью:

В манифесте android:targetSdkVersion должен быть 14 или выше.

Таким образом, на старых версиях (без системного отступа) отступ будет 8dp, а на новых – 0dp и останется только системный отступ.

На следующем уроке:

— настраиваем виджет при размещении
— работаем с view-компонентами виджета при обновлении

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Источник

Как работать с виджетами экрана на Андроид. Установка и удаление виджетов

С помощью всевозможных виджетов можно сделать интерфейс удобнее и подстроить его под себя.

Несмотря на то, что эти дополнительные элементы появились еще с первых версий операционной системы Android, популярность они обрели не так давно. В связи с этим важно знать, как установить виджет на Андроид.

Типы виджетов

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

Грамотные виджеты с рабочего стола могут увеличить функциональность всего устройства и сэкономить пользователю немало времени.

Например, если установить 2-3 таких элемента на основной экран, и выбрать отображение именно нужной информации, то ту же погоду, время в нескольких часовых поясах и кнопки для управления плеером можно расположить рядом.

Намного удобней и быстрей, нежели открывать часы, погоду и музыкальное приложение через список всех программ.

Существует огромное количество виджетов. Многие из них есть в операционной системе, а другие можно скачать через предустановленные или сторонние приложения.

Благодаря открытой архитектуре Андроида любой разработчик может сделать собственный элемент интерфейса.

Чтобы можно было легко найти виджеты и проще в них ориентироваться, они были поделены на несколько типов. Список видов и их описание:

  1. Информация.

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

    Виджеты этого типа показывают множество одинаковых элементов в небольшом окне. Это может быть перечень последних писем на почту, колонка актуальных новостей, плитки фотографий и прочее. Чаще всего коллекцию можно не только смотреть, но и открыть (например, фото, если речь о галерее).
  3. Управление.

    Через виджеты этого типа можно включать и выключать различные функции смартфона или планшета, а также всячески взаимодействовать с ними. Чаще всего одно подобное окно содержит несколько элементов управления, так как значки занимают очень мало места. В таком элементе интерфейса может быть Блютуз, Вай-Фай, мобильный интернет, снимок экрана, беззвучный режим, смена ориентации (горизонтальная или вертикальная) и прочие действия. Данный тип виджетов не пользуется популярностью из-за того, что удобнее управлять функциями аппарата через шторку уведомлений.
  4. Сочетание типов.

    Существуют и виджеты, которые сочетают в себе 2 или 3 вида окна. Например, элемент музыкального плеера относится и к управлению, и к информации, так как можно ставить на паузу и переключаться между треками, а также смотреть название и исполнителя песни.

Где находятся виджеты в Андроид

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

Они автоматически добавляются в систему при инсталляции. Но стоит понимать, что далеко не у каждой программы есть собственный виджет.

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

Настройка и работа с виджетами

Работа и настройка с виджетами на Android происходит легко. Очень удобно, что все действия, связанные с ними, выполняются в одном и том же месте.

Читайте также:  Smarttubenext для андроид тв

Как добавить виджет на главный экран

Чтобы пользоваться любым элементом интерфейса, сначала его необходимо добавить на дисплей.

Инструкция о том, как добавить виджет на экран Андроид:

  1. Удерживать палец на дисплее до тех пор, пока не появятся элементы взаимодействия с приложениями и самими домашним экраном.
  2. Тапнуть на значок и надпись “Виджеты”.
  3. Отобразится список мини-окон. Обычно они разделены на категории. Например, “Часы”, “Заметки”, “Погода”, “Быстрый доступ” и прочие. Важно понимать, что это не типы виджетов, а одни и те же мини-окна в разном виде. Так в категории “Погода” будет лишь один виджет, представленный тремя размерами. Здесь надо выбрать необходимый элемент.
  4. Виджет перетащится на дисплей. Надо удерживать его пальцем и переместить в желаемое место. Если в области, куда было помещено окно, находились ярлыки приложений или другие виджеты, они автоматически окажутся снизу и “толкнут” другие элементы перед ними. Стоит обращать на это внимание.

Если вас не устраивают имеющиеся виджеты функциональностью, стилем или чем-то еще, можно установить сторонние.

Как удалить виджет

У пользователей операционной системы от Google нет проблем с тем, как убрать любые элементы интерфейса с дисплея.

Пошаговая инструкция для того как удалить виджеты на Андроиде:

  1. Удерживайте палец на дисплее до тех пор, пока не появятся элементы взаимодействия с приложениями и самими домашним экраном.
  2. Напротив ярлыков приложений и имеющихся мини-окон будет изображен значок минуса или крестик. Он означает удаление элемента. Тапните на подобный символ рядом с тем виджетом, который хочется удалить.
  3. Отобразится уведомление. Подтвердите действие.

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

Как настроить размер виджета на главном экране

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

Увеличение или уменьшение окна можно произвести прямо с домашнего экрана. Необходимо просто выбрать нужный размер в категории. Обычно этот показатель указывается как 2×2, 2х4, 4х4, 8х8 и т.д.

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

Пример настройки размера виджета приложения Google:

  1. Запустить программу.
  2. Перейти на вкладку “Ещё”, которая расположена в правом нижнем углу.
  3. Тапнуть на надпись “Настроить виджет”.
  4. Откроется окно с параметрами окна для пользовательского интерфейса. Отсюда можно изменить его размер, выбрать форму и даже поменять цвет.

К сожалению, программное обеспечение Гугл скорее исключение, а не правило. Редко встречаются приложения, через которые можно настраивать виджеты.

Бонус. Самые лучшие и необходимые виджеты для телефона

Если имеющиеся виджеты не устраивают, всегда можно скачать дополнительные.

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

Chronus

Лучший часовой виджет, который выглядит стильно и минималистично. Есть больше 10 типов часов, причем как аналогового типа, так и с циферблатом. Имеются даже варианты со встроенной лентой новостей и указанием погоды. Поддерживается Google Fit.

Google Keep

Великолепное приложение от Гугл, благодаря которому в списке виджетов появляются мини-окна с заметками. Текст удобно набирать и просматривать прямо с главного экрана без раскрытия полного приложения.

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

Также есть функция полноценного виджета заметки, которая прикреплена к экрану словно стикер на холодильнике. Нужно держать под рукой список продуктов, инструкцию или важное напоминание? Google Keep с этим справится!

Month

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

Никаких проблем с тем, как установить виджет на Андроид, не возникает, а также мини-окно может синхронизироваться со стандартным приложением календаря.

Благодаря этому все события переместятся, в том числе напоминания о праздниках и важных событиях.

Источник

Оцените статью