Widżety aplikacji można konfigurować. Na przykład widżet zegara może umożliwiać użytkownikom wybranie strefy czasowej.
Jeśli chcesz, aby użytkownicy mogli konfigurować ustawienia widżetu, utwórz jego konfigurację Activity
. Ta aktywność jest automatycznie uruchamiana przez hosta widżetu aplikacji podczas jego tworzenia lub później, w zależności od wybranych opcji konfiguracji.
Oświadczenie o działalności związanej z konfiguracją
W pliku manifestu Androida zadeklaruj aktywność konfiguracji jako zwykłą aktywność. 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ąć konfigurację. Następnie musisz zaimplementować właściwą aktywność.
Wdrażanie aktywności konfiguracji
Podczas wdrażania tej aktywności należy pamiętać o 2 ważnych kwestiach:
- Host widżetu aplikacji wywołuje aktywność związaną z konfiguracją, która zawsze musi 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 transmisji
ACTION_APPWIDGET_UPDATE
, gdy uruchamiana jest aktywność konfiguracji, co oznacza, że nie wywołuje metodyonUpdate()
podczas tworzenia widgeta. Podczas tworzenia widżetu po raz pierwszy aktywność konfiguracyjna musi poprosić o aktualizacjęAppWidgetManager
. Jednak funkcjaonUpdate()
jest wywoływana w przypadku kolejnych aktualizacji – pomija się ją tylko przy pierwszym wywołaniu.
Przykładowe zwracanie wyniku z konfiguracji i aktualizowanie widżetu znajdziesz we fragmentach kodu w następnej sekcji.
Aktualizowanie widżetu z poziomu aktywności konfiguracji
Gdy widżet używa aktywności związanej z konfiguracją, odpowiada ono za aktualizację widżetu po zakończeniu konfiguracji. Możesz to zrobić, prosząc o aktualizację bezpośrednio w AppWidgetManager
.
Oto podsumowanie procedury prawidłowego aktualizowania widżetu i zamykania aktywności konfiguracji:
Pobierz identyfikator widżetu aplikacji z intencji, która uruchomiła działanie:
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
.W ten sposób, jeśli użytkownik wycofa się z działania przed jego zakończeniem, system powiadomi hosta widżetu aplikacji, że konfiguracja została anulowana, i host nie doda 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 wystąpienie interfejsu
AppWidgetManager
, wywołującgetInstance(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.
Zezwalanie użytkownikom na zmianę konfiguracji umieszczonych widżetów
Aby umożliwić użytkownikom ponowne konfigurowanie istniejących widżetów, określ flagę reconfigurable
w atrybucie widgetFeatures
appwidget-provider
. Więcej informacji znajdziesz w przewodniku deklarowania pliku AppWidgetProviderInfo.xml
. Na przykład:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable">
</appwidget-provider>
Użytkownicy mogą zmienić konfigurację widżetu, naciskając i przytrzymując widżet, a następnie klikając przycisk Skonfiguruj ponownie, który jest oznaczony etykietą 1 na ilustracji 1.
Używanie domyślnej konfiguracji widgetu
Możesz zapewnić płynniejsze korzystanie z widżetu, pozwalając użytkownikom pominąć początkowy krok konfiguracji. Aby to zrobić, w polu widgetFeatures
podaj flagi configuration_optional
i reconfigurable
. Dzięki temu nie trzeba uruchamiać czynności konfiguracyjnej po dodaniu widżetu przez użytkownika. Jak wspomnieliśmy wcześniej, użytkownik nadal może później ponownie skonfigurować widżet. Na przykład widżet zegara może pominąć początkową konfigurację i domyślnie wyświetlać strefę czasową urządzenia.
Oto przykład oznaczenia aktywności konfiguracyjnej jako konfigurowalnej i opcjonalnej:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable|configuration_optional">
</appwidget-provider>