Widget: Was ist das, Widgets auf iOS WidgetKit und Android

Autor: IT Sectr Veröffentlicht: 2026-02-15 Lesezeit: 10 Min.

Widget ist ein kompaktes Benutzeroberflächenelement auf dem Startbildschirm von iOS oder Android, das relevante Informationen anzeigt, ohne die App zu öffnen. Widgets erschienen in iOS 14 (2020) mit dem WidgetKit-Framework auf SwiftUI und existieren auf Android seit Version 1.5 über AppWidgetProvider auf Kotlin oder Java. Sie ermöglichen dem Benutzer, Wetter, Wechselkurse, Kalender, Notizen oder Aufgabenstatus direkt auf dem Startbildschirm zu sehen, sparen Zeit und vereinfachen die Interaktion. Laut Apple interagieren Benutzer durchschnittlich 4–6 Mal am Tag mit Widgets, und das Platzieren eines Widgets auf dem Startbildschirm erhöht das App-Engagement um 20–30%. Für Android sind diese Werte vergleichbar. Lassen Sie uns anhand von Codebeispielen untersuchen, wie Widgets auf beiden Plattformen funktionieren.

Wichtige Punkte

  • Widget — eine Mini-Anwendung auf dem Startbildschirm zum schnellen Anzeigen von Informationen ohne Öffnen der Haupt-App
  • iOS WidgetKit (iOS 14+) basiert auf SwiftUI mit drei Größen und Aktualisierung über TimelineProvider
  • Android AppWidgetProvider existiert seit API Level 3 und verwendet RemoteViews — eine begrenzte Anzahl von Views in einem separaten Prozess
  • Datenaktualisierung auf iOS — über Timeline mit Datumsangaben, auf Android — über updateIntervalMillis oder WorkManager
  • Smart Stack auf iOS und Widget-Stapel auf Android ermöglichen das Gruppieren mehrerer Widgets in einem Slot

Was ist ein Widget

Widget ist ein kompaktes Benutzeroberflächenelement, das auf dem Startbildschirm eines mobilen Geräts platziert wird, um relevante Informationen aus einer App anzuzeigen. Im Gegensatz zu einer vollständigen Anwendung benötigt ein Widget keinen Start — der Benutzer sieht die Daten sofort nach dem Entsperren des Bildschirms. Das Konzept stammt von Desktop-Betriebssystemen (macOS Dashboard, Windows Sidebar), und in der mobilen Umgebung führte Android Widget-Unterstützung mit der ersten Version ein (Android 1.5 Cupcake, 2009), während Apple sie erst in iOS 14 hinzufügte.

Die technische Implementierung unterscheidet sich je nach Plattform. Ein iOS-Widget ist ein separater Target in Xcode, der als Widget Extension kompiliert wird und in einem eigenen Prozess läuft. Ein Android-Widget ist ein BroadcastReceiver, der AppWidgetProvider erweitert und das Layout über RemoteViews rendert. Beide Plattformen legen strenge Leistungs- und Speicherbeschränkungen fest: Das System kann das Widget entfernen, wenn Grenzen überschritten werden. iOS begrenzt Widgets auf 30–50 MB und die Timeline-Erstellungszeit auf 10 Sekunden. Android — Aktualisierungsintervall nicht länger als 30 Minuten über updatePeriodMillis und erzwungene Beendigung, wenn onUpdate hängt.

Smart Stack auf iOS und Stapel auf Android ermöglichen es dem Benutzer, mehrere Widgets in einem Startbildschirm-Slot zu gruppieren. Das Gerät wechselt automatisch das angezeigte Widget basierend auf Tageszeit, Standort oder Benutzeraktivität. Beispielsweise wird morgens der Kalender angezeigt, tagsüber das Wetter, abends die Notizen. Für Entwickler bedeutet dies, dass das Widget als Teil eines Stapels korrekt funktionieren und nicht auf ständige Anzeige angewiesen sein muss.

iOS WidgetKit: SwiftUI und TimelineProvider

WidgetKit ist Apples Framework zum Erstellen von Widgets auf iOS 14+, iPadOS 14+ und macOS 11+. Widgets werden in Swift mit SwiftUI und dem TimelineProvider-Mechanismus zur Inhaltsaktualisierung geschrieben. Die WidgetKit-Architektur umfasst drei Komponenten: TimelineProvider — eine Datenquelle, die eine Zeitleiste mit Einträgen bildet; Widget Entry View — eine SwiftUI-View, die Inhalte basierend auf einem Eintrag anzeigt; Widget Configuration — eine Beschreibung des Widget-Typs, der Größen und Familien.

WidgetKit verwaltet Aktualisierungen automatisch — der Entwickler kann ein Widget nicht häufiger aktualisieren, als das System erlaubt. Apple verwendet ein Aktualisierungsbudget, das auf alle Widgets auf dem Gerät verteilt wird. Das Mindestintervall beträgt 15–30 Minuten. Für kritische Daten (z. B. Lieferstatus) wird Push-to-Refresh verwendet — Senden einer Push-Benachrichtigung mit einem relevanten zukünftigen Datum, woraufhin WidgetKit eine neue Zeitleiste anfordert. Ab iOS 17 unterstützen Widgets Interaktivität über App Intents — Benutzer können Schaltflächen innerhalb eines Widgets drücken, ohne die App zu öffnen.

GrößeiOS (pt)Inhalt
Small170 × 1701–2 Kennzahlen: Temperatur, Wechselkurs
Medium360 × 1702–4 Kennzahlen: 5-Tage-Vorhersage, Liste
Large360 × 3805–10 Kennzahlen: Kalender, Nachrichtenfeed

Android AppWidgetProvider: RemoteViews

AppWidgetProvider ist die Basisklasse zum Erstellen von Widgets auf Android, Teil des Android SDK seit API Level 3. Ein Android-Widget ist ein BroadcastReceiver, der Aktualisierungs-, Aktivierungs- und Deaktivierungsereignisse vom System empfängt. Im Gegensatz zu iOS, wo das Widget mit SwiftUI auf einer eigenen Engine gerendert wird, verwendet Android RemoteViews — eine begrenzte Anzahl von View-Komponenten, die im Systemprozess (Launcher) gerendert werden. Benutzerdefinierte Views, komplexe Animationen oder UI-Bibliotheken können nicht verwendet werden.

Der Android-Widget-Workflow umfasst vier Phasen. Konfiguration — beim Hinzufügen eines Widgets zum Bildschirm kann das System eine Konfigurations-Activity starten, in der der Benutzer Einstellungen auswählt. Aktualisierung — das System ruft onUpdate() in einem festgelegten Intervall (mindestens 30 Minuten) oder auf ein Signal der App über WorkManager auf. Rendering — der Anbieter erstellt RemoteViews mit aktuellen Daten und übergibt sie über AppWidgetManager. Berührungsbehandlung — das Widget unterstützt PendingIntent für Schaltflächen: Ein Klick öffnet eine Activity oder führt eine Aktion aus. Ab Android 12 unterstützen Widgets abgerundete Ecken, adaptive Material You-Farben und dynamische Größenänderung.

Ein Widget auf iOS mit WidgetKit erstellen

Lassen Sie uns ein Wetter-Widget in Swift mit WidgetKit und SwiftUI erstellen. Das Projekt muss einen Widget Extension-Target enthalten, der in Xcode über File → New → Target → Widget Extension hinzugefügt wird.

swift
import WidgetKit
import SwiftUI

// 1. Datenmodell für das Widget
struct WeatherEntry: TimelineEntry {
    let date: Date
    let temperature: Int
    let condition: String
}

// 2. TimelineProvider — Datenanbieter
struct Provider: TimelineProvider {
    func placeholder(in context: Context) -> WeatherEntry {
        WeatherEntry(date: Date(), temperature: 22, condition: "Sonnig")
    }

    func getSnapshot(in context: Context, completion: @escaping (WeatherEntry) -> Void) {
        let entry = WeatherEntry(date: Date(), temperature: 22, condition: "Sonnig")
        completion(entry)
    }

    func getTimeline(in context: Context, completion: @escaping (Timeline<WeatherEntry>) -> Void) {
        let now = Date()
        let entry = WeatherEntry(date: now, temperature: 20, condition: "Bewölkt")
        let nextUpdate = Calendar.current.date(byAdding: .hour, value: 3, to: now)!
        let timeline = Timeline(entries: [entry], policy: .after(nextUpdate))
        completion(timeline)
    }
}

// 3. SwiftUI-View zur Anzeige
struct WeatherWidgetEntryView: View {
    var entry: WeatherEntry

    var body: some View {
        VStack(alignment: .leading) {
            Text("Wetter").font(.caption).foregroundColor(.secondary)
            HStack {
                Text("\(entry.temperature)°").font(.largeTitle).fontWeight(.bold)
                Spacer()
                Text(entry.condition).font(.body)
            }
        }.padding()
    }
}

// 4. Widget-Konfiguration
@main
struct WeatherWidget: Widget {
    var body: some WidgetConfiguration {
        StaticConfiguration(kind: "WeatherWidget", provider: Provider()) { entry in
            WeatherWidgetEntryView(entry: entry)
        }
        .configurationDisplayName("Wetter")
        .description("Zeigt die aktuelle Temperatur an")
        .supportedFamilies([.systemSmall, .systemMedium])
    }
}

Wichtige Punkte: TimelineProvider bestimmt, wann und welche Daten angezeigt werden; getTimeline erstellt eine Zeitleiste mit der Aktualisierungsrichtlinie .after(nextUpdate); StaticConfiguration verbindet den Anbieter mit der View. Für dynamische Daten wird IntentConfiguration mit benutzerdefinierten Parametern verwendet.

Ein Widget auf Android mit AppWidgetProvider erstellen

Lassen Sie uns ein ähnliches Wetter-Widget in Kotlin mit AppWidgetProvider und RemoteViews implementieren.

kotlin
// WeatherWidgetProvider.kt
class WeatherWidgetProvider : AppWidgetProvider() {

    override fun onUpdate(
        context: Context,
        appWidgetManager: AppWidgetManager,
        appWidgetIds: IntArray
    ) {
        for (appWidgetId in appWidgetIds) {
            updateAppWidget(context, appWidgetManager, appWidgetId)
        }
    }

    override fun onAppWidgetOptionsChanged(
        context: Context,
        appWidgetManager: AppWidgetManager,
        appWidgetId: Int,
        newOptions: Bundle
    ) {
        updateAppWidget(context, appWidgetManager, appWidgetId)
    }

    companion object {
        fun updateAppWidget(
            context: Context,
            appWidgetManager: AppWidgetManager,
            appWidgetId: Int
        ) {
            val temperature = 20
            val condition = "Bewölkt"
            val views = RemoteViews(
                context.packageName, R.layout.widget_weather
            ).apply {
                setTextViewText(R.id.tv_temperature, "$temperature°")
                setTextViewText(R.id.tv_condition, condition)
                setOnClickPendingIntent(
                    R.id.widget_root, PendingIntent.getActivity(
                        context, 0,
                        Intent(context, MainActivity::class.java),
                        PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
                    )
                )
            }
            appWidgetManager.updateAppWidget(appWidgetId, views)
        }
    }
}

// AndroidManifest — Anbieterregistrierung
<receiver android:name=".WeatherWidgetProvider" android:exported="true">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data
        android:name="android.appwidget.provider"
        android:resource="@xml/widget_weather_info" />
</receiver>

Die Datei widget_weather_info.xml legt Mindestgrößen, Intervall und Layout fest: minWidth 160dp, minHeight 80dp, updatePeriodMillis 3600000 (1 Stunde). RemoteViews verwendet nur unterstützte Komponenten: LinearLayout, TextView, ImageView. Benutzerdefinierte Views und ConstraintLayout sind seit Android 5.0 verfügbar. GlanceLayout — ein experimenteller Compose-basierter Ansatz für RemoteViews — erschien in Android 15.

Häufig gestellte Fragen

Was ist der Unterschied zwischen Widget auf iOS und Android?

iOS WidgetKit bietet drei feste Größen (small, medium, large) und Aktualisierung über TimelineProvider mit Systembudget. Android AppWidgetProvider verwendet flexible zellenbasierte Größen, RemoteViews zum Rendern und Aktualisierung über updatePeriodMillis oder WorkManager.

Wie oft wird ein Widget aktualisiert?

Unter iOS steuert das System die Aktualisierung — das Mindestintervall beträgt 15–30 Minuten, für kritische Daten wird Push-to-Refresh verwendet. Unter Android wird das Intervall in updatePeriodMillis (mindestens 30 Minuten) oder über WorkManager für Hintergrundaufgaben festgelegt.

Welche Größen unterstützt Widget?

iOS unterstützt small (170x170pt), medium (360x170pt) und large (360x380pt). Android verwendet ein flexibles Zellenraster: von 2x1 bis 5x5, die Größe hängt vom Launcher und der OS-Version ab.

Kann ich einem Widget Animationen hinzufügen?

Unter iOS sind Animationen innerhalb von Widgets nicht verfügbar — es sind statische Elemente. Android RemoteViews unterstützt grundlegende Animationen über setFloat() und ViewPropertyAnimator, aber komplexe Animationen sind nicht verfügbar.

Verringert ein Widget die Geräteleistung?

Bei korrekter Implementierung — nein. Das System schränkt Widget-Ressourcen streng ein: unter iOS — Aktualisierungs- und Speicherbudget (30–50 MB), unter Android — mindestens Aktualisierungsintervall. Problembehaftete Widgets werden vom System zwangsweise beendet.

Zusammenfassung

  • Widget — ein kompaktes Startbildschirmelement für schnellen Zugriff auf App-Daten ohne Öffnen der App
  • iOS WidgetKit unterstützt drei feste Größen und Aktualisierung über TimelineProvider mit SwiftUI
  • Android AppWidgetProvider arbeitet über BroadcastReceiver und RemoteViews mit flexiblen Zellengrößen
  • Datenaktualisierung ist auf beiden Plattformen systembegrenzt: iOS — Aktualisierungsbudget, Android — mindestens 30 Minuten
  • Interaktivität erschien in iOS 17 (App Intents) und Android 12 (dynamische Farben, Schaltflächen)
  • Smart Stack auf iOS und Stapel auf Android ermöglichen das Gruppieren mehrerer Widgets mit automatischem Wechsel
  • Leistung ist entscheidend — das System beendet problembehaftete Widgets bei Überschreitung der Grenzen zwangsweise

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch