Widget: mi ez, widgetek iOS WidgetKit és Android rendszeren

Szerző: IT Sectr Megjelenés: 2026-02-15 Olvasási idő: 10 perc

Widget — egy kompakt felhasználói felület elem az iOS vagy Android kezdőképernyőjén, amely aktuális információkat jelenít meg az alkalmazás megnyitása nélkül. A widgetek az iOS 14-ben (2020) jelentek meg a WidgetKit keretrendszerrel SwiftUI-ben, és Androidon az 1.5-ös verzió óta léteznek az AppWidgetProvider segítségével Kotlin vagy Java nyelven. Lehetővé teszik a felhasználó számára, hogy az időjárást, árfolyamokat, naptárat, jegyzeteket vagy feladatállapotokat közvetlenül a home screen-en lássa, időt takarítva meg és egyszerűsítve az interakciót. Az Apple adatai szerint a felhasználók átlagosan napi 4–6 alkalommal interakcióba lépnek a widgetekkel, és egy widget elhelyezése a home screen-en 20–30%-kal növeli az alkalmazás iránti elköteleződést. Androidon ezek a mutatók összehasonlíthatók. Vizsgáljuk meg, hogyan működnek a widgetek mindkét platformon, kódpéldákkal.

Főbb pontok

  • Widget — mini-alkalmazás a kezdőképernyőn az információk gyors megtekintéséhez a fő alkalmazás elindítása nélkül
  • iOS WidgetKit (iOS 14+) SwiftUI-ra épül, három mérettel és TimelineProvideren keresztüli frissítéssel
  • Android AppWidgetProvider API level 3 óta létezik, és RemoteViews-t — korlátozott View készletet használ külön folyamatban
  • Adatfrissítés iOS-en — timeline segítségével dátumok megadásával, Androidon — updateIntervalMillis vagy WorkManager segítségével
  • Smart Stack iOS-en és widget halmok Androidon lehetővé teszik több widget egy slotba történő csoportosítását

Mi az a Widget

Widget — egy kompakt felhasználói felület elem, amely a mobileszköz kezdőképernyőjére kerül az alkalmazás aktuális információinak megjelenítésére. Ellentétben egy teljes alkalmazással, a widget nem igényel indítást — a felhasználó közvetlenül a képernyő feloldása után látja az adatokat. A koncepció asztali operációs rendszerekből (macOS Dashboard, Windows Sidebar) származik, a mobil környezetben pedig az Android az első kiadásától (Android 1.5 Cupcake, 2009) támogatja a widgeteket, míg az Apple csak az iOS 14-ben adta hozzá őket.

Technikai megvalósítás platformonként eltér. iOS widget — külön target az Xcode-ban, Widget Extensionként lefordítva, saját folyamatban fut. Android widget — BroadcastReceiver, amely kiterjeszti az AppWidgetProvider-t, a layout-ot RemoteViews segítségével rendereli. Mindkét platform szigorú korlátozásokat ír elő a teljesítményre és memóriára: a rendszer eltávolíthatja a widgetet a határértékek túllépése esetén. Az iOS 30–50 MB-ra és a timeline kialakítási idejét 10 másodpercre korlátozza a widgetet. Android — frissítési intervallum legfeljebb 30 percenként az updatePeriodMillis segítségével, és kényszerített leállítás az onUpdate lefagyása esetén.

Smart Stack iOS-en és halmok Androidon lehetővé teszik a felhasználó számára, hogy több widgetet egy slotba csoportosítson a home screen-en. A készülék automatikusan vált a megjelenített widget között a napszaktól, helytől vagy a felhasználó tevékenységétől függően. Például reggel a naptár, délben az időjárás, este a jegyzetek jelennek meg. A fejlesztő számára ez azt jelenti, hogy a widgetnek megfelelően kell működnie egy halmon belül, és nem támaszkodhat az állandó megjelenítésre.

iOS WidgetKit: SwiftUI és TimelineProvider

WidgetKit — az Apple keretrendszere widgetek létrehozásához iOS 14+, iPadOS 14+ és macOS 11+ rendszereken. A widgetek Swift nyelven íródnak a SwiftUI és a TimelineProvider mechanizmus használatával a tartalom frissítéséhez. A WidgetKit architektúra három összetevőből áll: TimelineProvider — adatforrás, amely idővonalat képez rekordokkal; Widget Entry View — SwiftUI View, amely a rekord alapján jeleníti meg a tartalmat; Widget Configuration — a widget típusának, méreteinek és családjainak leírása.

A WidgetKit maga kezeli a frissítést — a fejlesztő nem kényszerítheti ki a widget gyakoribb frissítését, mint amit a rendszer engedélyez. Az Apple frissítési költségvetést használ, amely eloszlik az eszköz összes widgetje között. Minimális időköz — 15–30 perc. Kritikus adatokhoz (pl. szállítási állapot) push-to-refresh használatos — egy push értesítés küldése releváns jövőbeli dátummal, amely után a WidgetKit új idővonalat kér. Az iOS 17-től kezdve a widgetek interaktivitást támogatnak az App Intenseken keresztül — a felhasználó megnyomhatja a widgeten belüli gombokat anélkül, hogy megnyitná az alkalmazást.

MéretiOS (pt)Tartalom
Small170 × 1701–2 mutató: hőmérséklet, árfolyam
Medium360 × 1702–4 mutató: 5 napos előrejelzés, lista
Large360 × 3805–10 mutató: naptár, hírfolyam

Android AppWidgetProvider: RemoteViews

AppWidgetProvider — a widgetek létrehozásának alaposztálya Androidon, az Android SDK része az API level 3 óta. Android widget — egy BroadcastReceiver, amely frissítési, aktiválási és deaktiválási eseményeket kap a rendszertől. Ellentétben az iOS-szel, ahol a widgetet a SwiftUI rajzolja a saját motorján, az Android RemoteViews-t — egy korlátozott View komponenskészletet használ, amely a rendszerfolyamatban (launcher) renderelődik. Egyéni View-k, összetett animációk vagy UI könyvtárak nem használhatók.

Az Android widget működési sémája négy szakaszból áll. Konfiguráció — a widget képernyőhöz adásakor a rendszer elindíthat egy konfigurációs Activity-t, ahol a felhasználó kiválasztja a beállításokat. Frissítés — a rendszer meghívja az onUpdate()-ot egy meghatározott időközönként (minimum 30 perc) vagy az alkalmazás jelzésére a WorkManageren keresztül. Renderelés — a szolgáltató RemoteViews-t hoz létre aktuális adatokkal, és továbbítja az AppWidgetManageren keresztül. Kattintások kezelése — a widget támogatja a PendingIntent-et a gombokhoz: kattintásra egy Activity nyílik meg, vagy művelet hajtódik végre. Az Android 12-től kezdve a widgetek támogatást kaptak a lekerekített sarkokhoz, az adaptív Material You színekhez és a dinamikus méretváltoztatáshoz.

Widget létrehozása iOS-en WidgetKit segítségével

Hozzunk létre egy időjárás widgetet Swift nyelven a WidgetKit és SwiftUI használatával. A projektnek tartalmaznia kell egy Widget Extension target-et, amely az Xcode-ban a File → New → Target → Widget Extension segítségével adható hozzá.

swift
import WidgetKit
import SwiftUI

// 1. Adatmodell a widgethez
struct WeatherEntry: TimelineEntry {
    let date: Date
    let temperature: Int
    let condition: String
}

// 2. TimelineProvider — adatszolgáltató
struct Provider: TimelineProvider {
    func placeholder(in context: Context) -> WeatherEntry {
        WeatherEntry(date: Date(), temperature: 22, condition: "Napos")
    }

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

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

// 3. SwiftUI View a megjelenítéshez
struct WeatherWidgetEntryView: View {
    var entry: WeatherEntry

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

// 4. Widget konfiguráció
@main
struct WeatherWidget: Widget {
    var body: some WidgetConfiguration {
        StaticConfiguration(kind: "WeatherWidget", provider: Provider()) { entry in
            WeatherWidgetEntryView(entry: entry)
        }
        .configurationDisplayName("Időjárás")
        .description("Aktuális hőmérsékletet mutat")
        .supportedFamilies([.systemSmall, .systemMedium])
    }
}

Kulcsfontosságú pontok: TimelineProvider meghatározza, hogy mikor és milyen adatokat jelenítsen meg; getTimeline idővonalat hoz létre .after(nextUpdate) frissítési irányelvvel; StaticConfiguration összeköti a szolgáltatót a View-val. Dinamikus adatokhoz az IntentConfiguration használatos felhasználói paraméterekkel.

Widget létrehozása Androidon AppWidgetProvider segítségével

Valósítsunk meg egy hasonló időjárás widgetet Kotlin nyelven az AppWidgetProvider és RemoteViews segítségével.

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 = "Felhős"
            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 — szolgáltató regisztrációja
<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>

A widget_weather_info.xml fájl beállítja a minimális méreteket, időközt és layout-ot: minWidth 160dp, minHeight 80dp, updatePeriodMillis 3600000 (1 óra). A RemoteViews csak támogatott összetevőket használ: LinearLayout, TextView, ImageView. Az egyéni View és a ConstraintLayout Android 5.0 óta érhető el. A GlanceLayout — kísérleti Compose megközelítés a RemoteViews számára — az Android 15-ben jelent meg.

Gyakran ismételt kérdések

Mi a különbség a Widget között iOS és Android rendszeren?

Az iOS WidgetKit három rögzített méretet (small, medium, large) és frissítést kínál a TimelineProvideren keresztül rendszerköltségvetéssel. Android AppWidgetProvider flexibilis cellaméreteket, RemoteViews-t a rendereléshez és frissítést az updatePeriodMillis vagy WorkManager segítségével használ.

Milyen gyakran frissül a Widget?

iOS-en a frissítést a rendszer vezérli — minimális időköz 15–30 perc, kritikus adatokhoz push-to-refresh használatos. Androidon az időköz az updatePeriodMillis-ben van beállítva (minimum 30 perc) vagy a WorkManageren keresztül háttérfeladatokhoz.

Milyen méreteket támogat a Widget?

Az iOS a small (170x170pt), medium (360x170pt) és large (360x380pt) méreteket támogatja. Az Android flexibilis cellarácsot használ: 2x1-től 5x5-ig, a méret a launcher-től és az OS verziójától függ.

Lehet animációt hozzáadni a Widgethez?

iOS-en nincsenek animációk a widgeten belül — ezek statikus elemek. Android RemoteViews alapvető animációkat támogat a setFloat() és ViewPropertyAnimator segítségével, de összetett animációk nem érhetők el.

Csökkenti-e a Widget a készülék teljesítményét?

Helyes megvalósítás esetén — nem. A rendszer szigorúan korlátozza a widget erőforrásait: iOS-en frissítési és memória költségvetés (30–50 MB), Androidon — minimális frissítési időköz. A problémás widgeteket a rendszer kényszerítve leállítja.

Összefoglalás

  • Widget — kompakt home screen elem az alkalmazás adatainak gyors eléréséhez anélkül, hogy megnyitná azt
  • iOS WidgetKit három rögzített méretet és frissítést támogat a TimelineProvideren keresztül SwiftUI-val
  • Android AppWidgetProvider BroadcastReceiver és RemoteViews segítségével működik flexibilis cellaméretekkel
  • Adatfrissítés mindkét platformon korlátozott a rendszer által: iOS — frissítési költségvetés, Android — minimum 30 perc
  • Interaktivitás az iOS 17-ben (App Intents) és az Android 12-ben (dinamikus színek, gombok) jelent meg
  • Smart Stack iOS-en és halmok Androidon lehetővé teszik több widget csoportosítását automatikus váltással
  • Teljesítmény kritikus — a rendszer kényszerítve leállítja a problémás widgeteket a határértékek túllépésekor

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is