App Widgets provide quick access to app functionality from the home screen. Jetpack Glance simplifies widget development with a Compose-like API.
Declaring a Widget
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="180dp"
android:minHeight="180dp"
android:updatePeriodMillis="3600000"
android:widgetCategory="home_screen"
android:initialLayout="@layout/widget_layout"
android:previewImage="@drawable/widget_preview" />
Creating a Glance App Widget
class MyAppWidget : GlanceAppWidget() {
override suspend fun provideGlance(context: Context, id: GlanceId) {
provideContent {
WidgetContent()
}
}
}
@Composable
private fun WidgetContent() {
Column(
modifier = GlanceModifier.fillMaxSize().padding(12.dp),
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "My Widget",
style = TextStyle(fontSize = 18.sp, fontWeight = FontWeight.Bold)
)
Button(
text = "Click Me",
onClick = actionRunCallback(::onWidgetClick)
)
}
}
suspend fun onWidgetClick() {
// Handle widget click
}
Widget Configuration Activity
class WidgetConfigureActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Column(modifier = Modifier.padding(16.dp)) {
Text("Configure Widget")
Button(
onClick = {
val resultValue = Intent().apply {
putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
}
setResult(RESULT_OK, resultValue)
finish()
}
) {
Text("Save")
}
}
}
}
}
Updating Widgets Periodically
class WidgetUpdateReceiver : GlanceAppWidgetReceiver() {
override val glanceAppWidget: GlanceAppWidget = MyAppWidget()
}
App Widgets extend your app's reach and provide value directly on the home screen.
8 Android app templates available on Gumroad
Top comments (0)