Widżety aplikacji można konfigurować. Na przykład widżet zegara może umożliwiać użytkownikom wybranie strefy czasowej.
Jeśli chcesz pozwolić użytkownikom na konfigurowanie ustawień widżetu, utwórz widżet
konfiguracji Activity
. To działanie jest
jest automatycznie uruchamiany przez hosta widżetu aplikacji podczas jego tworzenia
lub później, w zależności od opcji konfiguracji
określić.
Zadeklaruj aktywność związaną z konfiguracją
Zadeklaruj aktywność związaną z konfiguracją jako normalną aktywność w pliku manifestu Androida.
. Gospodarz widżetu aplikacji uruchamia go za pomocą działania ACTION_APPWIDGET_CONFIGURE
, więc aktywność musi akceptować ten zamiar. Na przykład:
<activity android:name=".ExampleAppWidgetConfigurationActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
Zadeklaruj aktywność w pliku AppWidgetProviderInfo.xml
za pomocą atrybutu android:configure
. Dowiedz się więcej o deklarowaniu tego pliku. Oto przykład deklarowania aktywności konfiguracji:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
...
android:configure="com.example.android.ExampleAppWidgetConfigurationActivity"
... >
</appwidget-provider>
Aktywność jest zadeklarowana w pełnej nazwie przestrzeni nazw, ponieważ program uruchamiający odwołuje się do niej spoza zakresu pakietu.
To wszystko, czego potrzebujesz, aby rozpocząć aktywność konfiguracji. Następnie musisz zaimplementuj rzeczywiste działanie.
Zaimplementuj aktywność związaną z konfiguracją
Podczas implementowania działania należy pamiętać o 2 ważnych kwestiach:
- Host widżetu aplikacji wywołuje aktywność związaną z konfiguracją oraz konfigurację
działanie musi zawsze zwracać wynik. Wynik musi zawierać identyfikator widżetu aplikacji przekazany przez intencję, która uruchomiła działanie. Identyfikator ten jest zapisany w dodatkowych danych intencji jako
EXTRA_APPWIDGET_ID
. - System nie wysyła
ACTION_APPWIDGET_UPDATE
jest przesyłana po uruchomieniu działania konfiguracji, co oznacza, że nie jest wywołuje metodęonUpdate()
podczas tworzenia widżetu. Działanie związane z konfiguracją odpowiada za wysyłanie próśb o aktualizację z urządzeniaAppWidgetManager
podczas tworzenia widżetu po raz pierwszy. Jednak funkcjaonUpdate()
jest wywoływana w przypadku kolejnych aktualizacji – pomija się ją tylko przy pierwszym wywołaniu.
We fragmentach kodu w następnej sekcji znajdziesz przykład zwracania i zaktualizować widżet.
Aktualizowanie widżetu z poziomu aktywności konfiguracji
Gdy widżet używa działania konfiguracyjnego, obowiązkiem
działanie aktualizacji widżetu po zakończeniu konfiguracji. Możesz to zrobić
możesz poprosić o aktualizację bezpośrednio do
AppWidgetManager
Oto podsumowanie procedury prawidłowej aktualizacji widżetu i zamknięcia aktywność związana z konfiguracją:
Pobierz identyfikator widżetu aplikacji z intencji, która uruchomiła aktywność:
Kotlin
val appWidgetId = intent?.extras?.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID ) ?: AppWidgetManager.INVALID_APPWIDGET_ID
Java
Intent intent = getIntent(); Bundle extras = intent.getExtras(); int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; if (extras != null) { appWidgetId = extras.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); }
Ustaw wynik aktywności na
RESULT_CANCELED
.Dzięki temu, jeśli użytkownik wycofa się z aktywności przed dotarciem do końca, system powiadamia hosta widżetu aplikacji o anulowaniu konfiguracji, host nie dodaje widżetu:
Kotlin
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) setResult(Activity.RESULT_CANCELED, resultValue)
Java
int resultValue = new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult(Activity.RESULT_CANCELED, resultValue);
Skonfiguruj widżet zgodnie z preferencjami użytkownika.
Po zakończeniu konfiguracji pobierz instancję usługi
AppWidgetManager
, wywołując funkcjęgetInstance(Context)
:Kotlin
val appWidgetManager = AppWidgetManager.getInstance(context)
Java
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
Zaktualizuj widżet za pomocą układu
RemoteViews
, wywołując funkcjęupdateAppWidget(int,RemoteViews)
:Kotlin
val views = RemoteViews(context.packageName, R.layout.example_appwidget) appWidgetManager.updateAppWidget(appWidgetId, views)
Java
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget); appWidgetManager.updateAppWidget(appWidgetId, views);
Utwórz intencję powrotu, ustaw ją z wynikiem działania i zakończ działanie:
Kotlin
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) setResult(Activity.RESULT_OK, resultValue) finish()
Java
Intent resultValue = new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult(RESULT_OK, resultValue); finish();
Przykładem jest klasa ListWidgetConfigureActivity.kt
na GitHubie.
Opcje konfiguracji widżetu
Domyślnie host widżetu aplikacji uruchamia aktywność konfiguracji tylko raz, bezpośrednio po dodaniu widżetu do ekranu głównego. Możesz jednak określić opcje, które pozwolą użytkownikom na zmianę konfiguracji dotychczasowych widżetów lub pominięcie początkowej konfiguracji widżetu przez podanie domyślnej konfiguracji widżetu.
Pozwól użytkownikom na zmianę konfiguracji umieszczonych widżetów
Aby umożliwić użytkownikom zmianę konfiguracji dotychczasowych widżetów, określ flagę reconfigurable
w atrybucie widgetFeatures
elementu appwidget-provider
. Więcej informacji znajdziesz w przewodniku na temat deklarowania pliku AppWidgetProviderInfo.xml
. Na przykład:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable">
</appwidget-provider>
Użytkownicy mogą ponownie skonfigurować swój widżet, dotykając ikony i przytrzymując widżet i klikając znajduje się przycisk Skonfiguruj ponownie. 1 na ilustracji 1.

Używanie domyślnej konfiguracji widgetu
Widżet może być bardziej płynny, pozwalając użytkownikom na pomijanie
początkowym etapie konfiguracji. Aby to zrobić, w polu widgetFeatures
określ flagi configuration_optional
i reconfigurable
. Pomija to
uruchamiania aktywności konfiguracyjnej po dodaniu widżetu przez użytkownika. Jak wspomnieliśmy wcześniej, użytkownik może później ponownie skonfigurować widget. Widżet zegara może na przykład pominąć konfigurację początkową i
domyślnie pokazuje strefę czasową urządzenia.
Oto przykład oznaczenia aktywności konfiguracyjnej jako obu opcjonalnych i możliwych do ponownego skonfigurowania.
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable|configuration_optional">
</appwidget-provider>