Как сделать виджет на андроид
Перейти к содержимому

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

  • автор:

Как сделать виджет в Android без программирования

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

Minimalistic Text

Приложение позволяет создавать минималистичные виджеты, состоящие из текста и чисел. Несмотря на название, у таких виджетов есть весьма широкие возможности.

После установки добавьте на рабочий стол виджет Minimalistic Text требуемого размера. Откроется окно настройки виджета.

В настройках можно выбрать фон, ориентирование, шрифт, действие по клику и т.д. Также в настройках есть предопределенные макеты для наполнения:

  • Время.
  • Дата.
  • Уровень заряда.
  • Температура.

Дополнительные возможности по наполнению виджета доступны при создании своего собственного макета виджета:

  • Текст.
  • Свободное/занятое место на карте SD.
  • Время работы системы.
  • Количество переданных данных по мобильной сети и не только.
  • Название сети Wi-Fi, IP адрес в сети Wi-Fi.
  • Нагрузка на CPU.
  • Количество занятой оперативной памяти.

Все величины можно выводить в тексте и в цифрах.

Сделать виджет через Minimalistic Text

Ultimate custom widget (UCCW)

Данное приложение позволяет делать виджеты не только из текста, но и с графическим содержанием.

При запуске открывается окно создания виджета. Чтобы добавить на виджет объект нажмите кнопку +/- вверху. Чтобы всяким образом перемещать и редактировать его нажмите вверху на кнопку «Select Object» и выберите добавленный объект.

На виджетах можно размещать такие объекты:

  • Время, дату и день недели.
  • Аналоговые часы.
  • Пользовательский текст.
  • Уровень заряда в цифрах или же графическое отображение оного.
  • Всю информацию о погоде — температуру, влажность, скорость ветра и т.д.
  • Геометрические фигуры.
  • Картинки.
  • Количество непрочитанных писем Gmail, sms и пропущенных звонков.
  • Время, когда зазвонит будильник.

Каждый элемент можно вращать, растягивать, сгибать и менять ему цвет. Разумеется, можно настроить действие по клику (Select Object->Hotspots). Поддерживается импорт и экспорт созданных виджетов.

Урок 117. Виджеты. Создание. 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:

My first widget Text in widget

Создаем 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.

package ru.startandroid.develop.p1171simplewidget; import java.util.Arrays; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.util.Log; public class MyWidget extends AppWidgetProvider < final String LOG_TAG = "myLogs"; @Override public void onEnabled(Context context) < super.onEnabled(context); Log.d(LOG_TAG, "onEnabled"); >@Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) < super.onUpdate(context, appWidgetManager, appWidgetIds); Log.d(LOG_TAG, "onUpdate " + Arrays.toString(appWidgetIds)); >@Override public void onDeleted(Context context, int[] appWidgetIds) < super.onDeleted(context, appWidgetIds); Log.d(LOG_TAG, "onDeleted " + Arrays.toString(appWidgetIds)); >@Override public void onDisabled(Context context) < super.onDisabled(context); Log.d(LOG_TAG, "onDisabled"); >>

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

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

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

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 [9]

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

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

onDeleted [8]
onDisabled

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

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

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

BroadcastReceiver

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

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

The element must include an element with the android:name attribute. This attribute specifies that the AppWidgetProvider accepts the ACTION_APPWIDGET_UPDATE broadcast. This is the only broadcast that you must explicitly declare. The AppWidgetManager automatically sends all other App Widget broadcasts to the AppWidgetProvider as necessary.

Т.е. 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 указываете:

android:padding=»@dimen/widget_margin»

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

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

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

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

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

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

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

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

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

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

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

Как создать виджет самостоятельно?

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

Розыгрыш Redmi Note 13 16.01 - 31.01

В основном виджеты идут в комплекте с приложением. Однако есть программы, которые лишены данной опции. А значит, нужно брать дело в свои руки!

1.jpg

  • С помощью Play Market скачиваем бесплатное приложение “KWGT Kustom Widget Maker”, которые можно приобрести бесплатно, однако часть функций будут доступны только после покупки дополнения.

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

2.jpg

Сперва можно подумать, что “KWGT Kustom Widget Maker” сложное приложение, которое напоминает программы для разработки софта. И да и нет: интерфейс похож, но сложного тут ничего нет.

3.jpg

Чтобы начать редактировать виджеты:

  • заходим на рабочий стол и вызываем меню редактирования рабочих столов путем удержания кнопки меню или долгим тапом по экрану;
  • находим рамку виджетов “KWGT” и выставляем необходимый размер, например — 4х2. После этого на рабочем столе образуется окошко;

4.jpg

  • Кликаем по окошку, тем самым открывая меню выбора виджетов;
  • Выбираем понравившийся макет и нажимаем на него (Дополнительные макеты можно скачивать с Play Маркет. Для этого в строке поиска приложений указываем “KWGT виджеты”);

5.jpg

  • После выбора понравившегося макета приложение перейдет к его редактированию. Будут доступны следующие настройки:
  1. Элементы, отвечающие за настройку геометрических параметров виджета;
  2. Фон, отвечающий за фоновую картинку на виджета;
  3. Касание, задающий действия которые будут выполняться при активации виджета;
  4. Слой, отвечающий за масштаб виджета;

6.jpg

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

7.jpg

Будьте уникальными вместе с Xistore!

Как создать свой собственный виджет для Android

Виджеты — это минимальные версии приложений, которые запускаются прямо на главном экране Android и могут быть чрезвычайно практичными. Большинство приложений в наши дни предлагают поддержку виджетов, и вы можете легко получить к ним доступ прямо с домашнего экрана. Однако, если вас не устраивает то, что доступно, вы всегда можете создать свои собственные виджеты для Android. Здесь мы покажем, как это можно сделать.

Оглавление

Как добавить виджеты на свой Android-смартфон

Добавить новые виджеты на экран Android довольно просто. Вам просто нужно выполнить шаги, описанные ниже.

1. Нажмите и удерживайте пустое место на главном экране.

2. Ниже появится меню. Выберите виджеты отсюда.

Создать виджет Доступные виджеты Android для устройства

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

Как создать свой собственный виджет для Android

Вы можете создать свой собственный виджет с помощью сторонних приложений. Одно из таких приложений KWGT Kustom Widget Maker, и для целей этого руководства мы используем его для разработки простого виджета напоминания о событиях, который ссылается на Календарь Google.

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

Персонализируйте свой виджет

1. Вызовите список доступных виджетов на вашем устройстве.

2. Прокрутите вниз, пока не найдете шаблоны виджетов KWGT, и выберите виджет из опций.

Создать виджет для Android Выберите виджет Kustom

3. Перетащите его на главный экран и переместите на место.

Создать шаблон виджета для Android

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

5. Вы попадете в пространство редактирования, в котором есть шесть вкладок: «Элементы», «Фон», «Слой», «Глобальные элементы», «Ярлыки» и «Сенсорный экран». Каждая вкладка позволяет вам настроить определенный аспект виджета.

Создать виджет Редактор макета виджета Android

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

Создать виджет Android Выбрать фон

Добавление объектов

1. Затем нажмите «Элементы», чтобы начать добавлять дополнительные элементы в свой контейнер. Найдите кнопку «+» в правом верхнем углу, чтобы начать их добавлять.

Связанный : 6 вещей, которые нужно знать об декабрьском обновлении Nexus 6P

Создать виджет Android Добавить новый объект

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

Создать выбор объекта Android для виджета

3. После того, как изображение было добавлено в виджет, нажмите «Положение», чтобы расположить его в желаемом месте в пространстве виджета.

Создать изображение положения Android для виджета

4. Когда вы, наконец, довольны результатом, нажмите на значок «Файл» в верхнем левом углу, а затем снова на «+», чтобы добавить следующий элемент.

Создать значок папки Android для виджета

5. На этот раз выберите Текст.

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

Создать виджет Android Добавить текст

7. Нажмите «Текст», чтобы начать вводить слова, которые должен отображать виджет. Чтобы изменить стиль написания текста, нажмите «Шрифт».

Создать виджет Android Написать текст

8. Используйте параметр «Положение», чтобы расположить текст внутри виджета.

Создать текст позиции Android для виджета

9. Теперь, когда ваш виджет почти готов, нам нужно сделать еще одну вещь. Мы хотим подключить виджет к Календарю Google, чтобы при нажатии на него он переводил нас прямо в приложение. Для этого нам нужно снова нажать на значок файла.

10. В меню ниже проводите пальцем по экрану, пока не найдете опцию Touch.

Создать виджет Android Добавить ссылку на виджет

11. Нажмите «Пользовательское действие -> Расширенный редактор» и выберите действие. В данном случае «Запустить приложение».

Создание действия для запуска приложения Android для виджета

12. Выберите приложение из появившегося списка.

Создать ссылку для Android виджета на приложение

13. Вы создали соединение, как вы можете видеть на вкладке Touch.

Добавлена ​​ссылка на создание виджета для Android

14. Вот и все. Теперь сохраните виджет, вернитесь на главный экран и протестируйте свое творение. Он должен работать нормально.

Создать виджет Android Новый вид виджета

Заключение

KWGT Kustom Widget Maker — это творчество. Проведите некоторое время с приложением и познакомьтесь с различными объектами и значками. Это определенно приложение, с которым вам нужно поэкспериментировать, чтобы разобраться в нем. Однако, как только вы это сделаете, вы действительно сможете начать создавать довольно крутые виджеты.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *