Glance,官方对其解释是使用 Jetpack Compose 样式的 API 构建远程 Surface 的布局,通俗的讲就是使用Compose风格的API来搭建小插件布局,其最新版本是2022年2月23日更新的1.0.0-alpha03。众所周知,Compose样式的API与原生差别不小,至于widget这块改动如何,接下来让我们来一探究竟。
声明依赖项第一步肯定要添加对应依赖,相应的都是在build.gradle中添加,如果你的工程还没支持Compose,要先添加:
android {
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.1.0-beta03"
}
kotlinOptions {
jvmTarget = "1.8"
}
}
如果已经支持,上述依赖可以省略,但下述依赖不能省略,继续添加:
dependencies {
implementation("androidx.glance:glance-appwidget:1.0.0-alpha03")
implementation("androidx.glance:glance-wear-tiles:1.0.0-alpha03")
}
以上是官方的标准依赖方式,同样以下面这种方式依赖也可以:
implementation 'androidx.glance:glance-appwidget:+'
implementation 'androidx.glance:glance:+'
implementation "androidx.glance:glance-appwidget:1.0.0-alpha03"
创建对应 widget
首先编写对应布局,放在对应/layout/xml目录下:
widget_info.xml
我在上一篇介绍widget的文章中说过,widget其实就是个广播,广播属于四大组件,而四大组件都要在AndroidManifest清单文件中注册:
对应CounterWidgetReceiver代码为:
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import com.ktfly.comapp.ui.theme.CounterWidget
class CounterWidgetReceiver : GlanceAppWidgetReceiver(){
override val glanceAppWidget: GlanceAppWidget = CounterWidget()
}
可能看到这里你就迷惑了,widget对应广播类不是要继承AppWidgetProvider然后实现相应方法的吗,其实Glance提供的GlanceAppWidgetReceiver类就已经继承了AppWidgetProvider,我们使用Glance需要GlanceAppWidgetReceiver:
abstract class GlanceAppWidgetReceiver : AppWidgetProvider() {
private companion object {
private const val TAG = "GlanceAppWidgetReceiver"
}
/**
* Instance of the [GlanceAppWidget] to use to generate the App Widget and send it to the
* [AppWidgetManager]
*/
abstract val glanceAppWidget: GlanceAppWidget
@CallSuper
override fun onUpdate(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetIds: IntArray
) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
Log.w(
TAG,
"Using Glance in devices with API
关注
打赏