Створіть Android-віджет для свого додатка

Автор: Lewis Jackson
Дата Створення: 13 Травень 2021
Дата Оновлення: 1 Липня 2024
Anonim
🉐 НОВЫЕ ТЕМЫ и ВИДЖЕТЫ MIUI сделают XIAOMI УНИКАЛЬНЫМ👍
Відеоролик: 🉐 НОВЫЕ ТЕМЫ и ВИДЖЕТЫ MIUI сделают XIAOMI УНИКАЛЬНЫМ👍

Зміст


З перших днів роботи ОС віджети для Android дозволяють користувачам спілкуватися зі своїми улюбленими програмами, не заважаючи домашньому екрану. Отже, як створити віджет Android?

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

Віджети надають вашій програмі цінну присутність на домашньому екрані користувача

У цій статті я покажу вам, як забезпечити кращу роботу користувачів, заохочуючи користувачів брати участь у вашому додатку, створивши віджет Android! В кінці цієї статті ви створили віджет для колекції, який можна прокручувати, який відображає повний набір даних на домашньому екрані користувача.

Щоб ви надавали користувачеві віджет хочу щоб розмістити їх на головному екрані, ми також створимо активність налаштування, яка дозволить користувачам налаштувати вміст, зовнішній вигляд та функції віджета. Нарешті я покажу, як ви можете заохотити людей використовувати ваш віджет, створивши зображення для попереднього перегляду віджетів, що демонструє найкраще, що може запропонувати ваш віджет.


Читайте також: Розробка для складних пристроїв: що потрібно знати

Що таке віджети для Android?

Віджет програми - це легка, мініатюрна програма, яка живе на домашньому екрані користувача.

Віджети для Android можуть пропонувати різноманітний вміст, але зазвичай належать до однієї з таких категорій:

  • Інформаційний віджет. Це віджет, який не можна прокручувати, який відображає деяку інформацію, наприклад, прогноз погоди сьогодні, дату та час.
  • Колекція віджетів. Це віджет, який можна прокручувати, який відображає набір пов’язаних даних, відформатованих у вигляді ListView, GridView, StackView або AdapterViewFlipper. Віджети колекції зазвичай підтримуються джерелом даних, таким як база даних або масив.
  • Керування віджетами. Ці віджети виконують функцію дистанційного керування, що дозволяє користувачам взаємодіяти з вашою програмою, без маючи вивести його на перший план. У додатках, які відтворюють медіа, такі як подкасти або музика, часто є віджети управління, які дозволяють користувачеві запускати дії "Play", "Призупиняти" та "Пропускати" безпосередньо з головного екрану.
  • Гібридні віджети. Іноді, можливо, ви зможете забезпечити кращу роботу користувачів, поєднуючи елементи з декількох категорій. Наприклад, якщо ви розробляєте віджет керування для музичного додатку, тоді ви можете надати функції "Відтворення", "Призупинити" та "Пропустити", але ви можете також вирішити відображати певну інформацію, наприклад, назву пісні та виконавця. Якщо ви все-таки вирішите змішувати та поєднувати, то не захоплюйтесь! Віджети, як правило, забезпечують найкращу роботу користувачів, коли вони забезпечують легкий доступ до невеликої кількості своєчасної відповідної інформації або декількох часто використовуваних функцій. Щоб зберегти ваші гібридні віджети легкими, рекомендується визначити основну категорію віджета, розробити її відповідно до цієї категорії та потім додайте кілька елементів із другорядної категорії віджета.

Чи справді мій проект потребує віджета програми?

Є кілька причин, чому вам слід розглянути можливість додавання віджету програми до вашого проекту Android.


Віджети для Android можуть покращити роботу користувачів

Як правило, чим менше навігаційних кроків, необхідних для виконання завдання, тим кращий досвід користувача.

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

Більш потужний, ніж ярлики додатків

Віджети додатків часто реагують на події onClick, запускаючи верхній рівень у пов’язаному додатку, подібно до ярлика програми. Однак віджети також можуть надавати прямий доступ до певних заходів у програмі, наприклад, натискання віджета по Новому отриманому сповіщенню віджета може запустити пов’язаний додаток із новим уже відкритим.

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

Вставивши декілька посилань у макет свого віджета, ви можете надати доступ одним дотиком до всіх найважливіших заходів програми.

Зауважте, що віджети відповідають лише на події onClick, що не дає користувачам випадково взаємодіяти з вашим віджетом під час переходу по робочому екрану. Єдиним винятком є ​​те, коли користувач намагається видалити ваш віджет, перетягнувши його до дії «Видалити» свого домашнього екрану, оскільки в цьому випадку ваш віджет відповість на жест вертикального пальця.

Ця взаємодія керується системою Android, тому вам не потрібно турбуватися про те, як вручну реалізувати підтримку вертикального переведення в свій віджет.

Створіть віджет для Android, щоб сприяти довготривалому залученню

Переконання людей у ​​завантаженні вашого додатка - лише перший крок до створення успішного додатка для Android. Швидше за все, якщо ви візьмете власний смартфон або планшет Android і проведіть пальцем по ящику додатків, то ви виявите кілька додатків, якими ви не користувались днів, тижнів чи, можливо, навіть місяців!

Читайте також:Початок роботи з Facebook для SDK для Android

Після того, як ваш додаток буде успішно встановлено на пристрої користувача, вам потрібно буде наполегливо працювати, щоб продовжувати займатися і насолоджуватися вашим додатком. Надання вашої програми присутності на головному екрані може бути потужним інструментом для сприяння довготривалому залученню, просто тому, що це постійне нагадування про те, що ваша програма існує!

Добре розроблений віджет також може служити рекламою для вашої програми. Кожен раз, коли користувач заглядає на свій домашній екран, ваш віджет має можливість активно заохочувати їх повторно взаємодіяти з вашим додатком, представляючи їм весь найцікавіший і корисний вміст вашого додатка.

Створення віджета програми для колекції

У цьому підручнику ми будемо створювати віджет колекції, який відображає масив у вигляді прокручуваного ListView.

Щоб відстежувати життєвий цикл віджетів додатків, цей віджет також викликає різні тости, коли він рухається через різні стани життєвого циклу. Наприкінці цього підручника ми покращимо наш віджет спеціальним зображенням попереднього перегляду, яке відображатиметься у програмі вибору віджетів Android, та активністю конфігурації, яка дозволить користувачам налаштовувати віджет перед тим, як розмістити його на початковому екрані.

Створіть новий проект Android з налаштуваннями на ваш вибір, і почнемо!

Створення макета вашого віджета

Для початку давайте визначимо користувальницький інтерфейс віджета (інтерфейс користувача).

Віджети програми відображаються в процесі зовні вашої програми, тому ви можете використовувати лише макети та представлення даних, які підтримуються RemoteViews.

Створюючи ваш макет, ви обмежуєтесь наступним:

  • AnalogClock
  • Кнопка
  • Хронометр
  • Рамка кадру
  • GridLayout
  • ImageButton
  • ImageView
  • Лінійний макет
  • Індикатор виконання
  • Відносна схема
  • TextView
  • ViewStub
  • AdapterViewFlipper
  • GridView
  • ListView
  • StackView
  • ViewFlipper

Зауважте, що підкласи вищевказаних класів та представлень є ні підтримується.

Створіть новий файл ресурсу макета з назвою list_widget.xml. Оскільки ми відображатимемо наші дані за допомогою ListView, цей макет в основному служить контейнером для елемент:

Поповнення віджета колекції

Далі нам потрібно створити постачальника даних для нашого ListView. Створіть новий клас Java під назвою DataProvider.java та додайте наступне:

імпорт android.content.Context; імпорт android.content.Intent; імпортувати android.widget.RemoteViews; імпортувати android.widget.RemoteViewsService; імпорт java.util.ArrayList; імпорт java.util.List; імпортувати статичний android.R.id.text1; імпортувати статичний android.R.layout.simple_list_item_1; публічний клас DataProvider реалізує RemoteViewsService.RemoteViewsFactory {Список myListView = новий ArrayList <> (); Контекст mContext = null; загальнодоступний DataProvider (контекст контексту, наміри) {mContext = контекст; } @Override public void onCreate () {initData (); } @Override public void onDataSetChanged () {initData (); } @Override public void onDestroy () {} @Override public int getCount () {return myListView.size (); } @Override public RemoteViews getViewAt (позиція int) {view RemoteViews = новий RemoteViews (mContext.getPackageName (), simple_list_item_1); view.setTextViewText (text1, myListView.get (position)); вид повернення; } @ Oververide public RemoteViews getLoadingView () {return null; } @Override public int getViewTypeCount () {return 1; } @Override public long getItemId (int position) {повернути позицію; } @Override public boolean hasStableIds () {return true; } приватна void initData () {myListView.clear (); for (int i = 1; i <= 15; i ++) {myListView.add ("елемент ListView" + i); }}}

AppWidgetProvider: Налаштування віджета

Щоб створити віджет Android, потрібно створити кілька файлів.

Наш перший файл, що стосується віджетів, - це AppWidgetProvider, який є BroadcastReceiver, де ви визначатимете різні способи життєвого циклу віджетів, наприклад метод, що викликається при створенні віджета вперше, і метод, який називається, коли цей віджет зрештою видаляється.

Створіть новий клас Java (Файл> Новий> Клас Java) з назвою CollectionWidget.

Для початку всі файли постачальника віджетів повинні поширюватися з класу AppWidgetProvider. Потім нам потрібно завантажити файл ресурсу макета list_widget.xml в об’єкт RemoteViews та повідомити AppWidgetManager про оновлений об’єкт RemoteViews:

публічний клас CollectionWidget розширює AppWidgetProvider {static void updateAppWidget (контекст контексту, AppWidgetManager appWidgetManager, int appWidgetId) {// Instantiate the RemoteViews object // RemoteViews views = new RemoteViews (context.getPackageidName); setRemoteAdapter (контекст, погляди); // Попросити, щоб AppWidgetManager оновлював віджет програми // appWidgetManager.updateAppWidget (appWidgetId, перегляди); }

Створіть адаптер

Оскільки ми відображаємо наші дані у ListView, нам потрібно визначити метод setRemoteAdapter () у нашому AppWidgetProvider. SetRemoteAdapter () еквівалентний виклику AbsListView.setRemoteViewsAdapter (), але призначений для використання у віджетах програми.

У цьому методі нам потрібно визначити ідентифікатор AdapterView (R.id.widget_list) та намір служби, яка в кінцевому підсумку надасть дані нашому RemoteViewsAdapter - ми незабаром створимо цей клас WidgetService.

приватний статичний недійсний setRemoteAdapter (контекст контексту, остаточні перегляди @NonNull) {views.setRemoteAdapter (R.id.widget_list, новий намір (контекст, WidgetService.class)); }}

Визначення методів життєвого циклу віджетів

У нашому AppWidgetProvider нам також потрібно визначити такі способи життєвого циклу віджетів:

Отримання нового вмісту за допомогою оновлення

Метод життєвого циклу віджетів onUpdate () відповідає за оновлення переглядів вашого віджета новою інформацією.

Цей метод викликається кожен раз:

  • Користувач виконує дію, яка вручну запускає метод onUpdate ().
  • Зазначений інтервал оновлення програми минув.
  • Користувач розміщує новий екземпляр цього віджета на своєму головному екрані.
  • Намір широкомовної трансляції ACTION_APPWIDGET_RESTORED надсилається AppWidgetProvider. Цей намір трансляції спрацьовує, якщо віджет коли-небудь відновлюється із резервного копіювання.

Тут ви також зареєструєте будь-які обробники подій, якими повинен користуватися ваш віджет.

Оновляючи віджет Android, важливо пам’ятати, що користувачі можуть створювати кілька примірників одного і того ж віджета. Наприклад, можливо, ваш віджет налаштовується, і користувач вирішує створити кілька "версій", які відображають різну інформацію або надають доступ до унікальних функціональних можливостей.

Коли ви зателефонуєте onUpdate (), вам потрібно вказати, чи ви оновлюєте кожен примірник цього віджета чи лише певний екземпляр. Якщо ви хочете оновлювати кожен екземпляр, тоді ви можете використовувати appWidgetIds - це масив ідентифікаторів, який ідентифікує кожен примірник на пристрої.

У наступному фрагменті я оновлюю кожен примірник:

@Override public void onUpdate (контекст контексту, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId: appWidgetIds) {// Оновлення всіх примірників цього віджета // updateAppWidget (контекст, appWidgetManager; appWidgetId) } super.onUpdate (контекст, appWidgetManager, appWidgetIds); }

Зауважте, що, щоб допомогти зберегти код прямо, цей метод onUpdate () наразі не вносить жодних змін у віджет.

onEnabled: Виконання початкової установки

Метод життєвого циклу onEnabled () викликається у відповідь на ACTION_APPWIDGET_ENABLED, який надсилається, коли екземпляр вашого віджета додається на головний екран для спочатку час. Якщо користувач створить два екземпляри вашого віджета, тоді onEnabled () буде викликаний для першої інстанції, але ні на другий.

Метод життєвого циклу onEnabled () - це те, де слід здійснити будь-яку інсталяцію, необхідну для всіх примірників вашого віджета, наприклад створення бази даних, яка подаватиме інформацію про ваш віджет.

Я покажу тост, щоб ви могли точно бачити, коли називається цей метод життєвого циклу:

@Override public void onEnabled (контекст контексту) {Toast.makeText (контекст, "onEnabled закликаний", Toast.LENGTH_LONG) .show (); }

Зауважте, що якщо користувач видаляє всі екземпляри вашого віджета, а потім створить новий екземпляр, то це класифікується як перший екземпляр, і метод життєвого циклу onEnabled () буде викликаний ще раз.

Прибирання, з увімкнено

Метод onDisabled () викликається у відповідь на ACTION_APPWIDGET_DISABLED, який запускається, коли користувач видаляє останнім екземпляр вашого віджета.

Цей спосіб життєвого циклу віджетів - це те, де слід очистити будь-які ресурси, створені методом onEnabled (), наприклад, видалити базу даних, створену в onEnabled ().

Щоб ми могли просто зрозуміти наш код, я буду просто показувати тости щоразу, коли цей метод запускається:

@Override public void onDisabled (контекст контексту) {Toast.makeText (контекст, "onDisabled call", Toast.LENGTH_LONG) .show (); }

Завершений AppWidgetProvider

Тепер ваш файл CollectionWidget повинен виглядати приблизно так:

імпортувати android.appwidget.AppWidgetManager; імпортувати android.appwidget.AppWidgetProvider; імпорт android.content.Context; імпорт androidx.annotation.NonNull; імпорт android.content.Intent; імпортувати android.widget.RemoteViews; імпорт android.widget.Toast; // Розширення з класу AppWidgetProvider // public class CollectionWidget розширює AppWidgetProvider {статичний void updateAppWidget (контекст контексту, AppWidgetManager appWidgetManager, int appWidgetId) {// Завантажте файл ресурсу макета в об’єкт RemoteViews // Видалення контексту RemoteViews = Видалення контексту RemoteViews getPackageName (), R.layout.list_widget); setRemoteAdapter (контекст, погляди); // Повідомити AppWidgetManager про об’єкт RemoteViews // appWidgetManager.updateAppWidget (appWidgetId, перегляди); } @Override public void onUpdate (контекст контексту, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId: appWidgetIds) {updateAppWidget (контекст, appWidgetManager, appWidgetId); } super.onUpdate (контекст, appWidgetManager, appWidgetIds); } @Override public void onEnabled (контекст контексту) {Toast.makeText (контекст, "onEnabled call", Toast.LENGTH_LONG) .show (); } @Override public void onDisabled (контекст контексту) {Toast.makeText (контекст, "onDisabled call", Toast.LENGTH_LONG) .show (); } приватний статичний недійсний setRemoteAdapter (контекст контексту, остаточні перегляди @NonNull RemoteViews) {views.setRemoteAdapter (R.id.widget_list, новий намір (контекст, WidgetService.class)); }}

Файл AppWidgetProviderInfo

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

Файл AppWidgetProviderInfo зберігається у папці res / xml вашого проекту.

Якщо ваш проект ще не містить цієї папки, вам знадобиться створити її:

  • Клацніть контрольною кнопкою миші папку дозволу вашого проекту.
  • Виберіть Створити> Каталог ресурсів Android.
  • У наступному вікні відкрийте спадне меню Тип ресурсу та виберіть xml.
  • Ім'я Каталогу повинно автоматично оновлюватися до xml, але якщо це не так, вам потрібно буде змінити його вручну.
  • Натисніть кнопку ОК.

Далі створіть файл collection_widget_info, який ми використовуватимемо як наш AppWidgetProviderInfo:

  • Клацніть клавішею миші папку xml вашого проекту.
  • Виберіть Новий> XML-файл ресурсу.
  • Назвіть цей файл collection_widget_info.
  • Натисніть кнопку ОК.

У нашому файлі AppWidgetProviderInfo нам потрібно визначити такі властивості:

1. android: previewImage

Це те, що відображає віджет вашої програми у програмі вибору віджетів пристрою.

Якщо ви не надаєте зображення для попереднього перегляду, Android замість нього використовуватиме значок вашої програми. Щоб заохотити користувачів вибирати ваш віджет із програми вибору віджетів, слід надати черпак, який показує, як буде виглядати ваш віджет, коли він буде правильно налаштований на домашній екрані користувача.

Найпростіший спосіб створити зображення для попереднього перегляду - скористатися програмою «Віджет попереднього перегляду», включеною в емулятор Android. Ця програма дозволяє налаштувати ваш віджет, а потім генерувати зображення, яке потім можна використовувати у вашому проекті Android.

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

2. android: widgetCategory

Віджети додатків повинні бути розміщені в хості додатка віджетів додатків, який, як правило, є головним екраном Android, але також можуть бути сторонніми запускаючими, такими як Evie Launcher або Nova Launcher.

Між рівнями API 17 та 20 можна було розмістити віджети додатків на початковому екрані або на рівні блокировки, але підтримка блокувального екрану була застаріла в рівні 21 API.

За допомогою атрибута android: widgetCategory можна вказати, чи можна віджет програми розміщувати на головному екрані, блокувальному екрані (який Android називає «охоронцем клавіатури») або обом. Оскільки розміщення віджетів на блокувальному екрані в останніх версіях Android не вдається, ми орієнтуємося лише на домашній екран.

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

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

3. андроїд: початковий макет

Це файл ресурсу макета, який ваш віджет повинен використовувати, коли він розміщений на головному екрані, який для нашого проекту є list_widget.xml.

4. android: resizeMode = "горизонтальна | вертикальна"

Атрибут android: resizeMode дозволяє вказати, чи можна віджет змінювати по горизонталі, вертикалі або вздовж обох осей.

Щоб переконатися, що ваш віджет відображається та функціонує правильно на різних екранах, рекомендується дозволити розмір віджета по горизонталі і вертикально, якщо у вас немає конкретної причини цього не робити.

5. android: minHeight та android: minWidth

Якщо ваш віджет може змінити розмір, вам потрібно переконатися, що користувач не зменшить ваш віджет до того моменту, коли він стане непридатним. Ви можете використовувати атрибути minHeight та minWidth, щоб визначити найменший розмір вашої програми, коли він змінить розмір користувачем.

Ці значення також відображають початковий розмір вашого віджета, тому якщо ваш віджет не може змінювати розмір, то minHeight та minWidth визначають постійний розмір віджета.

6. android: updatePeriodMillis

AppWidgetProviderInfo також визначає, як часто ваш віджет повинен запитувати нову інформацію.

Найменший підтримуваний інтервал оновлення - один раз кожні 1800000 мілісекунд (30 хвилин). Навіть якщо ви оголосите коротший інтервал оновлення, ваш віджет все одно оновлюватиметься лише раз на півгодини.

Хоча, можливо, ви захочете відобразити останню інформацію якомога швидше, система буде розбудити сплячий пристрій, щоб отримати нову інформацію. Часті оновлення можуть прогоріти через акумулятор пристрою, особливо в періоди, коли пристрій залишається в режимі очікування протягом значного періоду часу, наприклад, протягом ночі. Надання найкращого можливого досвіду користувача означає досягнення балансу між обмеженням споживання акумулятора та наданням нової інформації у розумні часові рамки.

Ви також повинні врахувати, який вміст відображатиме ваш віджет.

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

Щоб знайти цей ідеальний баланс, можливо, вам доведеться протестувати свій віджет на різних частотах оновлення та виміряти вплив на час автономної роботи та своєчасність вмісту вашого віджета. Якщо у вас є група бажаючих тестувальників, ви навіть можете налаштувати тестування A / B, щоб побачити, чи приймаються деякі частоти оновлення більш позитивно, ніж інші.

Aalso читав: AndroidManifest.xml все, що потрібно знати

Нарешті, виявивши ідеальний інтервал оновлення, можливо, ви захочете скористатися меншим інтервалом при розробці та тестуванні програми. Наприклад, ви можете використовувати найкоротшу можливу частоту оновлення (android: updatePeriodMillis = ”1800000 ″), коли ви перевіряєте, що ваш додаток методом onUpdate () спрацьовує правильно, а потім змінити це значення, перш ніж випускати додаток для широкої публіки.

Завершено AppWidgetProviderInfo

Готовий файл collection_widget_info.xml повинен виглядати приблизно так:

Не захаращуйте домашній екран користувача!

Щоб домашній екран ніколи не виглядав захаращеним, ми додамо до нашого віджету трохи підкладки та поля. Якщо ваш проект ще не містить файл dimens.xml, вам знадобиться створити його:

  • Клацніть клавішею папки зі значеннями вашого проекту.
  • Виберіть Новий> Файл ресурсів Значення.
  • Дайте цьому файлу ім’я розмірів.
  • Натисніть кнопку ОК.

Відкрийте файл dimens.xml і визначте наступні значення поля та прокладки:

10dp 8dp

Надсилання даних у віджет

Далі нам потрібно створити службу віджетів, яка відповідатиме за надсилання даних про колекцію у віджет.

Створіть новий клас Java (новий> клас Java) під назвою WidgetService та додайте наступне:

імпорт android.content.Intent; імпортувати android.widget.RemoteViewsService; публічний клас WidgetService розширює RemoteViewsService {@Override public RemoteViewsFactory onGetViewFactory (наміри) {повернути новий DataProvider (це, наміри); }}

Реєстрація віджета в Manifest

Нам зараз потрібно внести деякі зміни в Маніфест нашого проекту.

Для початку відкрийте Manifest і зареєструйте свій віджет як BroadcastReceiver. Нам також потрібно додати фільтр намірів для дії android.appwidget.action.APPWIDGET_UPDATE:

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

Нарешті, нам потрібно оголосити службу, яка надсилатиме дані на наш віджет, який у цьому випадку є класом WidgetService. Для цієї послуги потрібен дозвіл android.permission.BIND_REMOTEVIEWS:

Поставте свій віджет на тест

Якщо ви дотримувалися цього навчального посібника, тепер у вас з’явиться повний віджет колекції, який відображає набір даних на домашньому екрані користувача.

Якщо це реальний проект Android, ви зазвичай розширюєте методи життєвого циклу, зокрема метод onUpdate (), але це все, що нам потрібно, щоб створити віджет, який можна встановити та протестувати на пристрої Android:

  • Встановіть цей проект на сумісний смартфон, планшет або AVD (Android Virtual Device).
  • Довго натискайте будь-який порожній розділ домашнього екрану та вибирайте віджети за запитом; це запускає інструмент вибору віджетів.
  • Проведіть пальцем по виборці віджетів, поки не знайдете створений вами віджет програми.
  • Довго натискайте цей віджет, щоб додати його на домашній екран.
  • Оскільки це перший екземпляр цього віджета, метод onEnabled () повинен запуститися, і ви побачите тост "onEnabled називається".
  • Змініть розмір віджета. Якщо ви встановите мінімальний підтримуваний розмір, перевірте, чи не можете ви зменшити віджет минулого цього значення.
  • Перевірте, що ListView прокручується, як очікувалося.
  • Далі слід перевірити метод onDisabled (), видаливши віджет. Довго натисніть віджет, а потім виберіть Видалити з головного екрану. Оскільки це останній екземпляр цього віджета, метод onDisabled () повинен запуститися, і ви побачите тост "onDisabled call".

Це все, що вам потрібно, щоб доставити функціональний віджет програми для Android, але є кілька доповнень, які часто можуть покращити роботу користувачів. У наступних розділах ми рекомендуємо користувачам обирати цей віджет із програми "Вибір віджетів", створивши зображення для попереднього перегляду, в якому найкраще відображатиметься віджет. Я також покажу вам, як створити віджет, що повністю налаштовується, додавши в проект проект Активність налаштування.

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

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

Щоб заохотити користувачів вибирати ваш віджет, слід надати попередній образ, який висвітлює всю корисну інформацію та функції, які може запропонувати ваш віджет.

Ви можете швидко та легко створити зображення для попереднього перегляду за допомогою програми «Віджет попереднього перегляду», що входить до емулятора Android.

Зауважте, що попередній перегляд віджетів не включений до останніх системних зображень Android, тому вам потрібно буде створити AVD за допомогою Nougat (API рівень 25) або раніше:

  • Встановіть свою програму на AVD, на якому працює API 25 або новішої версії.
  • Відкрийте ящик додатка AVD і запустіть програму «Віджет попереднього перегляду».
  • Попередній перегляд віджетів відображатиме список усіх програм, які зараз встановлені на цьому AVD; виберіть свою програму зі списку.

  • Тепер ваш віджет відображатиметься на порожньому тлі. Витратьте деякий час, змінивши розмір і налаштуйте свій віджет, поки він не відобразить найкраще, що може запропонувати ваш віджет.
  • Коли ви задоволені зовнішнім виглядом та вмістом вашого віджета, виберіть Знімати знімок.

  • Щоб отримати знімок, поверніться до Android Studio і виберіть Перегляд> Інструмент Windows> Провідник файлів пристроїв на панелі інструментів. Це запускає Провідник файлів пристроїв Android Studio.
  • У Провіднику файлів пристрою перейдіть до sdcard / Download. Ви повинні знайти попереднє зображення, збережене у такому форматі: _ori_.png

  • Перетягніть це зображення з Android Studio і відкиньте його кудись легко доступним, наприклад, на робочий стіл.
  • Дайте цьому файлу зображень описову назву.
  • Перетягніть файл у папку, що малюється вашим проектом.
  • Відкрийте свій AppWidgetProviderInfo, який для цього проекту є collection_widget_info.xml.
  • Знайдіть рядок android: previewImage = ”@ mipmap / ic_launcher” та оновіть його для посилання на ваше зображення для попереднього перегляду.

Тепер ваш віджет використовуватиме цей новий ресурс зображення як своє попереднє зображення:

  • Встановіть оновлений проект на свій фізичний пристрій Android або AVD.
  • Довго натискайте будь-який порожній розділ домашнього екрану.
  • Торкніться віджетів, який запускає програму вибору віджетів.
  • Перейдіть до свого віджета; Тепер він повинен використовувати оновлене зображення для попереднього перегляду.

Налаштовані віджети: Додавання активності конфігурації

Активність конфігурації запускається автоматично, коли користувач розміщує кожен екземпляр вашого віджета на їх головному екрані.

Є кілька причин, чому ви можете додати активність по налаштуванню до свого проекту.

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

По-перше, для деяких віджетів потрібні початкові налаштування, наприклад, віджет, який відображає сповіщення про трафік, може знадобитися знати домашню адресу користувача, де вони працюють, та час, коли вони зазвичай здійснюють маршрути. Без способу введення цієї інформації ваш віджет може бути абсолютно марним!

Крім того, віджети, як правило, забезпечують найкращу роботу користувачів, коли вони надають доступ до інформації або функцій, які є найбільш важливими для окремого користувача. Додавши в проект проект Активність конфігурації, ви можете надати користувачам свободу вибору та вибору точно що включено у ваш віджет

Навіть відносно прості налаштування, такі як зміна фону або шрифту віджета, можуть мати позитивний вплив на роботу користувачів - зрештою, ніхто не оцінить віджет, який візуально стикається з рештою їх домашнього екрану!

Ніхто не буде цінувати віджет, який візуально стикається з рештою домашнього екрану!

Крім того, іноді у вас може бути довгий список вмісту, який ви хочете включити у свій віджет, і ви намагаєтесь звузити свої параметри. Активність конфігурації може бути способом корисного використання всіх ваших ідей створення захаращений, заплутаний віджет. Пам’ятайте лише, що налаштування віджета не повинно спричинити за собою справи, тому якщо ви надаєте активність із налаштування, то рекомендується обмежитися трьома параметрами конфігурації.

Додамо активність налаштування до нашого проекту!

По-перше, нашій діяльності з налаштування потрібен макет, тому створіть новий файл ресурсу макета з назвою config_activity.xml.

Я додам до цього макета такі кнопки:

  • Кнопка конфігурації. У реальному проекті ця кнопка змінює віджет певним чином, наприклад додаючи або видаляючи вміст або змінюючи частоту оновлення віджета. Щоб допомогти зберегти наш код прямо, натисканням цієї кнопки буде просто відображений тост з параметрами конфігурації.
  • Кнопка налаштування. Після того, як користувач буде задоволений тим, як налаштований їх віджет, натисканням цієї кнопки буде розміщений щойно налаштований віджет на їх головному екрані.

Ось мій завершений файл config_activity.xml:

Створіть активність налаштування

Тепер нам потрібно створити нашу конфігураційну діяльність.

Для початку створіть новий клас Java під назвою ConfigActivity. У цій діяльності ми збираємося отримати ідентифікатор віджета додатка з наміру, який запустив активність налаштування. Якщо у цього наміру немає ідентифікатора віджета, нам потрібно буде зателефонувати за способом закінчення ():

Намір наміру = getIntent (); Комплекти додатків = intent.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); якщо (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {закінчити (); }

Далі нам потрібно створити зворотний намір, передати оригінальний appWidgetId і встановити результати діяльності з налаштування:

Intent resultValue = новий Намір (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); закінчити (); }}}

Якщо ви надаєте активність конфігурації, то трансляція ACTION_APPWIDGET_UPDATE не надсилатиметься автоматично при запуску активності налаштування, що означає метод onUpdate () не буде викликати, коли користувач створює екземпляр вашого віджета.

Для того, щоб ваш віджет був створений з актуальною інформацією та вмістом, ваша активність у налаштуваннях повинен запустити перший запит onUpdate ().

Ось виконана ConfigActivity:

імпорт android.app.Activity; імпортувати android.appwidget.AppWidgetManager; імпортувати android.os.Bundle; імпортувати android.widget.Button; імпорт android.content.Intent; імпортувати android.view.View; імпортувати android.view.View.OnClickListener; імпорт android.widget.Toast; Public Class ConfigActivity розширює активність {@Override, захищена void onCreate (пакет збереженихInstanceState) {super.onCreate (saveInstanceState); setContentView (R.layout.config_activity); setResult (RESULT_CANCELED); Кнопка setupWidget = (Кнопка) findViewById (R.id.setupWidget); setupWidget.setOnClickListener (новий OnClickListener () {@Override public void onClick (View v) {handleSetupWidget ();}}); Кнопка configButton = (Кнопка) findViewById (R.id.configButton); configButton.setOnClickListener (новий OnClickListener () {@Override public void onClick (View v) {handleConfigWidget ();}}); } приватний void handleSetupWidget () {showAppWidget (); } приватна void handleConfigWidget () {Toast.makeText (ConfigActivity.this, "Параметри конфігурації", Toast.LENGTH_LONG) .show (); } int appWidgetId; private void showAppWidget () {appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; Намір наміру = getIntent (); Комплекти додатків = intent.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); якщо (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {закінчити (); } // ДЛЯ: виконайте конфігурацію // Intent resultValue = new Intent (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); закінчити (); }}}

Після створення активності в налаштуваннях вам потрібно оголосити цю активність у Manifest та вказати, що вона приймає дію APPWIDGET_CONFIGURE:

Нарешті, оскільки активність конфігурації посилається за межі пакету, нам потрібно оголосити цю активність у нашому AppWidgetProviderInfo, який у цьому випадку є файлом collection_widget_info.xml:

android: configure = "com.jessicathornsby.collectionwidget.ConfigActivity">

Тестування вашого проекту

Тепер саме час поставити готовий проект на тест:

  • Встановіть оновлений проект на фізичний пристрій Android або AVD.
  • Видаліть усі попередні екземпляри свого віджета, щоб переконатися, що ви працюєте з найновішою версією.
  • Довго натискайте будь-яку порожню область домашнього екрану та виберіть Віджети, коли з'явиться запит.
  • Знайдіть свій віджет у програмі "Вибір віджетів" і натисніть його, щоб вибрати його.
  • Перемістіть віджет на домашній екран. Активність налаштування повинна запускатися автоматично.
  • Натисніть кнопку "Виконати деяку конфігурацію" і з’явиться тост "Параметри конфігурації", який підтверджує, що ця взаємодія була зареєстрована успішно.
  • Уявіть, що ви змінили налаштування віджета і тепер готові розмістити його на домашньому екрані; натисніть кнопку Створити віджет, і цей віджет слід створити успішно.

Ви можете завантажити завершений проект віджетів колекції з GitHub.

Підведенню

У цій статті ми створили віджет колекції, який прокручується, який відображає набір даних на домашньому екрані користувача.

Якщо ви хочете продовжувати працювати з цим проектом, ви можете спробувати додати власний код до методу onUpdate (), щоб створити віджет, який оновлює нову інформацію через інтервал, визначений у вашому файлі AppWidgetProviderInfo (collection_widget_info).

Якщо ви створюєте віджет для Android, то обов'язково поділіться своїми творами в коментарях нижче!

LG ніколи не був відомий своїми оперативними оновленнями версій Android. Минулого року Android 9 почали впроваджуватися на пристрої в серпні, але користувачі LG не побачили публічну стабільну версію д...

Незважаючи на те, що Android 9 Pie доступний з серпня 2018 року, LG нарешті починає висувати оновлення своїх американських телефонів. Першим з'явився LG V40 ThinQ на Verizon Дроїд Життя раніше сьо...

Популярний