Widżety aplikacji to miniaturowe widoki aplikacji, które możesz umieszczać w innych aplikacjach, np. na ekranie głównym, i otrzymywać okresowe aktualizacje. W interfejsie są one nazywane widżetami. Możesz opublikować widżet za pomocą dostawcy widżetów aplikacji (lub dostawcy widżetów). Komponent aplikacji, który zawiera inne widżety, nazywa się hostem widżetów aplikacji (lub hostem widżetów). Na rysunku 1 widać przykładowy widżet muzyczny:
Z tego dokumentu dowiesz się, jak opublikować widżet za pomocą dostawcy widżetów. Szczegółowe informacje o tworzeniu własnego AppWidgetHost do hostowania widżetów aplikacji znajdziesz w artykule Tworzenie hosta widżetów.
Informacje o projektowaniu widżetu znajdziesz w artykule Omówienie widżetów aplikacji.
Komponenty widżetu
Aby utworzyć widżet, potrzebujesz tych podstawowych komponentów:
- Obiekt
AppWidgetProviderInfo - Opisuje metadane widżetu, takie jak układ, częstotliwość aktualizacji i klasa
AppWidgetProvider.AppWidgetProviderInfojest zdefiniowany w XML, zgodnie z opisem w tym dokumencie. - Zajęcia
AppWidgetProvider - Określa podstawowe metody, które umożliwiają programowe korzystanie z widżetu. Dzięki niemu otrzymujesz transmisje, gdy widżet jest aktualizowany, włączany, wyłączany lub usuwany. Deklarujesz
AppWidgetProviderw pliku manifestu, a następnie implementujesz go w sposób opisany w tym dokumencie. - Wyświetl układ
- Określa początkowy układ widżetu. Układ jest zdefiniowany w XML, jak opisano w tym dokumencie.
Rysunek 2 pokazuje, jak te komponenty pasują do ogólnego procesu przetwarzania widżetów aplikacji.
Jeśli widżet aplikacji wymaga konfiguracji przez użytkownika, zaimplementuj aktywność konfiguracji widżetu aplikacji. Ta aktywność umożliwia użytkownikom modyfikowanie ustawień widżetów, np. strefy czasowej widżetu zegara.
- Od Androida 12 (poziom API 31) możesz udostępnić domyślną konfigurację i pozwolić użytkownikom na późniejsze ponowne skonfigurowanie widżetu. Więcej informacji znajdziesz w sekcjach Korzystanie z domyślnej konfiguracji widżetu i Umożliwianie użytkownikom ponownej konfiguracji umieszczonych widżetów.
- W Androidzie 11 (poziom interfejsu API 30) lub starszym ta aktywność jest uruchamiana za każdym razem, gdy użytkownik doda widżet do ekranu głównego.
Zalecamy też wprowadzenie tych ulepszeń: elastyczne układy widżetów, różne ulepszenia, zaawansowane widżety, widżety kolekcji i tworzenie hosta widżetów.
Zadeklaruj plik XML AppWidgetProviderInfo
Określanie ustawień metadanych (takich jak domyślne rozmiary komórek, ograniczenia zmiany rozmiaru i częstotliwości aktualizacji) jest identyczne w przypadku tradycyjnych widoków i widżetów opartych na widokach Glance.
Aby dowiedzieć się, jak zdefiniować i skonfigurować plik XML metadanych, zapoznaj się z sekcją Deklarowanie pliku XML AppWidgetProviderInfo w dokumentacji Glance.
Używanie klasy AppWidgetProvider do obsługi komunikatów widżetów
Mechanizmy odbiornika transmisji platformy, filtry deklaracji pliku manifestu i pętle zdarzeń cyklu życia są ujednolicone na platformie. W przypadku programowania z użyciem Compose te transmisje są koordynowane za pomocą otoki GlanceAppWidgetReceiver.
Aby dowiedzieć się, jak zarejestrować odbiornik w pliku manifestu i wdrożyć zastąpienia cyklu życia zgodne z Hiltem, zapoznaj się z sekcją Używanie klasy AppWidgetProvider do obsługi transmisji w dokumentacji Glance (w języku angielskim).
Tworzenie układu widżetu
Musisz zdefiniować początkowy układ widżetu w pliku XML i zapisać go w katalogu res/layout/ projektu. Szczegółowe informacje znajdziesz we wskazówkach dotyczących projektowania.
Tworzenie układu widżetu jest proste, jeśli znasz układy. Pamiętaj jednak, że układy widżetów są oparte na RemoteViews, które nie obsługuje wszystkich rodzajów układów ani widżetów widoku.
Nie możesz używać widoków niestandardowych ani podklas widoków obsługiwanych przezRemoteViews.
RemoteViews obsługuje też ViewStub, czyli niewidoczny element View o rozmiarze zero, którego możesz używać do leniwego powiększania zasobów układu w czasie działania.
Obsługa zachowań stanowych
W Androidzie 12 dodano obsługę zachowań stanowych przy użyciu tych komponentów:
Widżet nadal nie ma stanu. Aplikacja musi przechowywać stan i rejestrować zdarzenia zmiany stanu.
Poniższy przykład kodu pokazuje, jak wdrożyć te komponenty.
Kotlin
// Check the view.
remoteView.setCompoundButtonChecked(R.id.my_checkbox, true)
// Check a radio group.
remoteView.setRadioGroupChecked(R.id.my_radio_group, R.id.radio_button_2)
// Listen for check changes. The intent has an extra with the key
// EXTRA_CHECKED that specifies the current checked state of the view.
remoteView.setOnCheckedChangeResponse(
R.id.my_checkbox,
RemoteViews.RemoteResponse.fromPendingIntent(onCheckedChangePendingIntent)
)
Java
// Check the view.
remoteView.setCompoundButtonChecked(R.id.my_checkbox, true);
// Check a radio group.
remoteView.setRadioGroupChecked(R.id.my_radio_group, R.id.radio_button_2);
// Listen for check changes. The intent has an extra with the key
// EXTRA_CHECKED that specifies the current checked state of the view.
remoteView.setOnCheckedChangeResponse(
R.id.my_checkbox,
RemoteViews.RemoteResponse.fromPendingIntent(onCheckedChangePendingIntent));
Podaj 2 układy: jeden kierowany na urządzenia z Androidem 12 lub nowszym w folderze res/layout-v31, a drugi kierowany na starsze urządzenia z Androidem 11 lub starszym w domyślnym folderze res/layout.
Implementowanie zaokrąglonych narożników
Obliczanie zewnętrznego tła i wewnętrznych promieni proporcjonalnych jest standardowe i wspólne. W przypadku tworzenia aplikacji w pierwszej kolejności za pomocą Compose można go ustawić dynamicznie w języku Kotlin wraz z zasobami motywu niestandardowego.
Aby wdrożyć promienie zaokrąglenia lub skonfigurować style dynamiczne na starszych urządzeniach z Androidem, zapoznaj się z sekcją Implementowanie zaokrąglonych rogów w dokumentacji Glance.