Android桌面小组件的问题记录

关于Android小组件的开发使用我们在这里不作展开,主要记录几个注意点:

1、Android小组件里可以发起网络请求,然后刷新小组件数据;

2、小组件的配置最小宽度android:minWidth的值设置过大可能导致在部分版本的操作系统上不会显示,尝试改小一点宽度值,比如:255dp,根据实际需要调整即可;

android:minWidth="255dp"

3、小组件的android:minWidth和android:minHeight的数值是按照格子(桌面图标)的数量来设置,1个格子是40dp,2个格子110dp,3个格子180dp,4个格子250dp,... n个格子70 * n - 30(来源于Google文档);但是如果不希望小组件会跟随系统设置的显示大小而变大(有些手机在系统设置-显示-显示大小,调整了更大的大小,小组件也会跟着放大),那么建议把android:minHeight设置小一些,比如:只想显示一行桌面图标的高度,也就是 4 x 1,那么可以这样设置:

android:minHeight="35dp"

这样即使系统设置了最大显示,小组件依然还是显示一行,如果设置成40dp的话会按照4 x 2的布局进行显示;

4、部分低版本系统(8.x 以下)的Android手机会把小组件的预览图(android:previewImage)缓存,即使卸载重装应用、重启手机、修改更换预览图图片名称等操作也无法刷新,通过还原手机设置可以刷新;

android:previewImage="@drawable/widget_weather_preview"

5、小组件的最小刷新间隔是30分钟,我这里设置的是一个小时

android:updatePeriodMillis="1800000"

6、在AppWidgetProvider的onUpdate回调函数中通过remoteViews.setOnClickPendingIntent给小组件设置点击打开应用,过一段时间可能会失效导致点击小组件无法启动应用,可以在onReceive回调函数中也设置一次,这样的话可以确保点击小组件打开应用一直不会失效;

override fun onReceive(context: Context, intent: Intent?) {
    super.onReceive(context, intent)
    val remoteViews = RemoteViews(context?.packageName, R.layout.weather_widget_layout)
    val pendingIntent = HomeWidgetLaunchIntent.getActivity(
            context,
            MainActivity::class.java)
    remoteViews.setOnClickPendingIntent(R.id.widget_container, pendingIntent)
   // more logic here...  
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容