Trochę o widżetach

Pora wrócić do tematyki Androidowej – dziś parę słów o widżetach. Widżety to miniaturowe widoki aplikacji, które mogą być wbudowane w inne aplikacje (widget hosty; najczęściej jest to Home Screen).

Rejestracja widżetów w pliku AndroidManifest.xml

Ponieważ widżety są uruchamiane w ramach procesów swojego hosta, trzeba je zarejestrować w pliku AndroidManifest.xml. W tym miejscu definiujemy filtry intencji, które mogą aktualizować widżet  oraz umieszczamy informacje o pliku xml, który definiuje obiekt AppWidgetProviderInfo.

<receiver android:name=".WikiWidget">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>

    <meta-data
        android:name="android.appwidget.provider"
        android:resource="@xml/wiki_widget_info" />
</receiver>

AppWidgetProviderInfo

Obiekty z klasy  AppWidgetProviderInfo zawierają metadane widżetu takie jak układ widoku, czy częśtość z jaką widżet jest aktualizowany.

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialKeyguardLayout="@layout/wiki_widget"
    android:initialLayout="@layout/wiki_widget"
    android:minHeight="40dp"
    android:minWidth="100dp"
    android:previewImage="@drawable/example_appwidget_preview"
    android:resizeMode="horizontal|vertical"
    android:updatePeriodMillis="86400000"
    android:widgetCategory="home_screen"></appwidget-provider>

AppWidgetProvider

Klasa AppWidgetProvider jest rozszerzeniem klasy BroadcastReceiver, która umożliwia komunikację wewnątrz systemu. Obiekty z tej klasy odbierają informacje tylko o zdarzeniach, które dotyczą widżetu. W odpowiedzi na te informacje może być wywołana jedna z następujących metod:

onUpdate()

onAppWidgetOptionsChanged()

onDeleted(Context, int[])

onEnabled(Context)

onDisabled(Context)

onReceive(Context, Intent)

Układ widoku

Ponieważ widżety są uruchamiane w procesach innych aplikacji, do tworzenia układów widoków wykorzystywana jest klasa RemoteViews. Klasa ta ma ograniczonę liczbę układów (FrameLayout, LinearLayout, RelativeLayout, GridLayout)  oraz innych elementów interfejsu:

Klasy dziedziczące po wymienionych klasach, nie są wspierane przez RemoteViews.

A to zrzut widżeta wyświetlającego dzisiejszą datę w formacie zgodnym z artykułami z Wikipedii:

SC20160427-200049.png

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s