当前位置: 首页 > news >正文

使用Jetpack Glance创建Android Widget

使用Jetpack Glance创建Android Widget

Jetpack Glance发布,让我们使用Google提供的Jetpack Glance创建一个联系人列表小部件。

https://developer.android.com/jetpack/compose/glance

什么是Glance?

Jetpack Glance是一个使用Kotlin API创建小型、轻量级和高效的应用程序小部件的框架。它设计用于显示用户需要一目了然的信息。

我们将构建什么?

正如我在开头提到的,我们将构建一个联系人列表小部件。以下是它的样子。

设置
根据您需要的功能,在应用程序模块中添加依赖项。

dependencies {// For AppWidgets supportimplementation("androidx.glance:glance-appwidget:1.0.0-beta01")// For interop APIs with Material 2implementation("androidx.glance:glance-material:1.0.0-beta01")// For interop APIs with Material 3implementation("androidx.glance:glance-material3:1.0.0-beta01")
}

创建ContactListWidget

创建一个名为ContactListWidget的新kt文件。我们首先要做的是继承GlanceAppWidget。然后,覆盖provideGlance函数。在这里,我们将构建小部件的UI。

打开provideContent块,这个方法非常类似于setContent,它允许我们使用Jetpack Compose的composables

override suspend fun provideGlance(context: Context, id: GlanceId) {provideContent {// ...}
}

在创建小部件之前,让我们为它创建一个主题。

主题

首先,我们要创建一个colorScheme。在我的例子中,我只是从应用程序主题中删除了private属性,然后在这里调用了它们。

private val colorScheme = ColorProviders(light = LightColorScheme,dark = DarkColorScheme
)

之后,我们可以调用GlanceTheme并将新的colorScheme传递给它。

override suspend fun provideGlance(context: Context, id: GlanceId) {provideContent {GlanceTheme(colors = colorScheme) {ContactListWidget.Widget()}}
}

现在让我们在这个类中创建一个名为Widget的单独函数,并用@Composable注解它。

记得导入Glance组件,而不是material组件。另外一件事是,Glance组件使用GlanceModifiers

@Composable
private fun Widget() {Box(modifier = GlanceModifier.background(GlanceTheme.colors.background).padding(15.dp).cornerRadius(20.dp) // Only works for Android versions >= 13) {LazyColumn {items(10) {Row(modifier = GlanceModifier.padding(vertical = 10.dp,horizontal = 5.dp).clickable {// Call the person},verticalAlignment = Alignment.CenterVertically) {Image(provider = ImageProvider(R.drawable.person),contentDescription = null)Spacer(modifier = GlanceModifier.width(10.dp))Text(text = "John Doe")}}}}
}

我们还需要创建一个GlanceAppWidgetReceiver。这将创建我们将在屏幕上看到的小部件视图。

class ContactListWidgetReceiver : GlanceAppWidgetReceiver() {override val glanceAppWidget: GlanceAppWidgetget() = ContactListWidget
}

现在我们需要创建一个XML文件,用于设置小部件的一些属性。Right-click on res > New Resource File

xml文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"android:description="@string/app_name"android:minWidth="80dp"android:minHeight="80dp"android:resizeMode="horizontal|vertical"android:widgetCategory="home_screen" />

最后,添加receiver到AndroidManifest.xml

<manifest><application><receiverandroid:name=".ContactListWidgetReceiver"android:exported="true"><intent-filter><action android:name="android.appwidget.action.APPWIDGET_UPDATE" /></intent-filter><meta-dataandroid:name="android.appwidget.provider"android:resource="@xml/contact_list_widget_info" /></receiver></application>
</manifest>

GitHub

https://github.com/daniatitienei/GlanceWidgetCourse.git

http://www.lryc.cn/news/103056.html

相关文章:

  • 【MyBatis 学习三】子段不一致问题 多表查询 动态SQL
  • 15. Spring AOP 的实现原理 代理模式
  • 死锁产生的原因以及解决方案
  • 【构造】CF1758 D
  • 【腾讯云 Cloud Studio 实战训练营】永不宕机的IDE,Coding Everywhere
  • JavaScript将一层级对象数组转为children嵌套的三层级树状对象数组(多级树状分类)
  • Windows脚本启动Redis、Java和Nginx服务指南
  • 【宝藏系列】STM32之C语言基础知识
  • 探索自除数:发现区间内的神奇数字
  • 打卡力扣题目四
  • npm yarn nrm
  • 关于我对刚开始学Java的小白想分享的内容:
  • Redis学习路线(5)—— Redis生成唯一ID
  • django后台系统Tyadmin
  • 设计模式适合用于解决特定的软件设计问题呢
  • 测试|测试分类
  • 矩阵中的路径(JS)
  • Linux时间体系与LinuxPTP
  • 最优除法(力扣)数学 JAVA
  • Git代码管理
  • 使用vscode进行远程开发服务器配置
  • 北斗gps卫星授时服务器(NTP)应用于防火墙场景
  • Quartz中Misfire机制源码级解析
  • 每日一题——重建二叉树
  • Python - json与字典dict
  • 性能测试必备监控技能linux篇
  • 【如何训练一个中英翻译模型】LSTM机器翻译模型部署之ncnn(python)(五)
  • C++ 面向对象三大特征
  • 【Github】自动监测 SSL 证书过期的轻量级监控方案 - Domain Admin
  • Echarts常见图表展示