Widżety aplikacji można konfigurować. Na przykład widżet zegara może umożliwiać użytkownikom skonfigurować wyświetlaną strefę czasową.
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.
. Host widżetu aplikacji uruchamia go z
ACTION_APPWIDGET_CONFIGURE
działanie, więc musi zaakceptować tę intencję. 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ą parametru
android:configure
. Zobacz więcej informacji:
zadeklarowanie tego pliku. Oto przykład:
Jak zadeklarować aktywność związaną z konfiguracją:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
...
android:configure="com.example.android.ExampleAppWidgetConfigurationActivity"
... >
</appwidget-provider>
Aktywność jest deklarowana z w pełni kwalifikowaną przestrzenią nazw, ponieważ program uruchamiający odwołuje się do niego spoza zakresu pakietu.
To wszystko, czego potrzebujesz, aby rozpocząć aktywność związaną z konfiguracją. Następnie musisz realizowanie działania.
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ć widżet aplikacji
Identyfikator przekazywany przez intencję, która uruchomiła aktywność – zapisany w intencji.
dodatkowe
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. Pamiętaj jednak: MetodaonUpdate()
jest wywoływana przy kolejnych aktualizacjach – jest pomijana tylko za pierwszym razem.
We fragmentach kodu poniżej znajdziesz przykład zwracania i zaktualizować widżet.
Zaktualizuj widżet na podstawie aktywności związanej z konfiguracją
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 powiadomi hosta widżetu aplikacji, że konfiguracja została anulowana, 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ę
AppWidgetManager
, dzwoniąc pod numergetInstance(Context)
:Kotlin
val appWidgetManager = AppWidgetManager.getInstance(context)
Java
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
Dodaj do widżetu Układ
RemoteViews
przez wywołanieupdateAppWidget(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);
utworzyć intencję zwrotu, ustawić ją za pomocą wyniku aktywności; zakończ aktywność:
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();
Zobacz
ListWidgetConfigureActivity.kt
znajdziesz na GitHubie.
Opcje konfiguracji widżetu
Domyślnie host widżetu aplikacji uruchamia aktywność związaną z konfiguracją tylko raz, natychmiast po dodaniu przez użytkownika widżetu do ekranu głównego. Musisz jednak mogą określać opcje umożliwiające użytkownikom ponowne konfigurowanie istniejących widżetów lub możesz pominąć początkową konfigurację widżetu, podając domyślną konfigurację.
Pozwól użytkownikom na ponowne skonfigurowanie umieszczonych widżetów
Aby umożliwić użytkownikom ponowne konfigurowanie istniejących widżetów, określ
reconfigurable
flagę w
widgetFeatures
appwidget-provider
. Zapoznaj się z przewodnikiem deklarowania
AppWidgetProviderInfo.xml
plik, aby uzyskać więcej
i informacjami o nich. 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żyj domyślnej konfiguracji widżetu
Widżet może być bardziej płynny, pozwalając użytkownikom na pomijanie
początkowym etapie konfiguracji. Aby to zrobić, podaj zarówno parametr
configuration_optional
i reconfigurable
w polu widgetFeatures
. Pomija to
uruchamiania aktywności konfiguracyjnej po dodaniu widżetu przez użytkownika. Jak wspomniano
użytkownik może nadal ponownie skonfigurować widżet.
później. 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 tych elementów opcjonalnych i możliwych do ponownego skonfigurowania.
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable|configuration_optional">
</appwidget-provider>