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

Android原生Widget使用步骤

需要创建三个XML文件以及一个Class文件
三个XML文件分别是

  1. Widget布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/white"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="Hello, Widget!"android:textSize="20sp" />
</RelativeLayout>
  1. WidgetInfoProvider文件
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"android:minWidth="40dp"android:minHeight="40dp"android:updatePeriodMillis="86400000"android:initialLayout="@layout/widght_layout"android:resizeMode="horizontal|vertical"android:widgetCategory="home_screen|keyguard"android:previewImage="@drawable/ic_launcher_background" />
  1. AndroidMainfest文件

3.1 在receiver标签下,添加广播的Action
3.2 在meta-data标签下,表明这个广播接收器是一个原生Widget,并加载原生Widget配置文件

    <receiverandroid:name=".MyTimeWidget"android:exported="true"><intent-filter><action android:name="android.appwidget.action.APPWIDGET_UPDATE" /><action android:name="com.ljheee.widget.UPDATE_TIME" /></intent-filter><meta-dataandroid:name="android.appwidget.provider"android:resource="@xml/my_time_widget_info" /></receiver>

4.继承AppWidgetProvider(实际上是一个广播接收器)

public class MyWidget extends AppWidgetProvider {@Overridepublic void onEnabled(Context context) {super.onEnabled(context);// 在第一个 Widget 实例添加到桌面时调用}@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {super.onUpdate(context, appWidgetManager, appWidgetIds);final int N = appWidgetIds.length;for (int i = 0; i < N; i++) {int appWidgetId = appWidgetIds[i];// 创建 RemoteViews 对象,用于更新 Widget 布局RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widght_layout);// 在这里可以对 RemoteViews 进行更多的操作,例如设置文本、图片等// 创建一个 Intent,用于点击事件Intent intent = new Intent(context, MyWidget.class);intent.setAction("com.example.myapp.ACTION_CLICK");PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);// 更新 WidgetappWidgetManager.updateAppWidget(appWidgetId, views);}}@Overridepublic void onDisabled(Context context) {super.onDisabled(context);// 在最后一个 Widget 实例从桌面移除时调用}@Overridepublic void onRestored(Context context, int[] oldWidgetIds, int[] newWidgetIds) {super.onRestored(context, oldWidgetIds, newWidgetIds);}@Overridepublic void onDeleted(Context context, int[] appWidgetIds) {super.onDeleted(context, appWidgetIds);// 当 Widget 被删除时调用}@Overridepublic void onReceive(Context context, Intent intent) {super.onReceive(context, intent);// 接收广播消息,可以处理 Widget 的点击等事件if (intent.getAction().equals("com.example.myapp.ACTION_CLICK")) {// 处理点击事件// 可以在此处添加相应的逻辑,如更新 Widget 内容或执行其他操作}}
}

http://www.mrgr.cn/news/82011.html

相关文章:

  • 【Python运维】用Python和Ansible实现高效的自动化服务器配置管理
  • SpringCloud源码分析-nacos与eureka
  • 【Redis】集群配置(主从复制 哨兵搭建)
  • Python 字符串定义及前缀
  • 走进深圳华为总部参观研学
  • 【SQL】进阶知识 -- SQL创建表的几种方法
  • Unity开发AR之Vuforia-MultiTarget笔记
  • 在React中引入tailwind css(图文详解)
  • 刷机TP-Link tp-link-WDR5660
  • 打印进度条
  • vue下载和上传的地址动态ip地址配置方法
  • sentinel-请求限流、线程隔离、本地回调、熔断
  • SAP SD信贷管理后台配置(上)
  • (一)开发环境搭建以及配置
  • K8S-LLM:用自然语言轻松操作 Kubernetes
  • [创业之路-225]:《华为闭环战略管理》-4-华为的商业智慧:在价值链中探索取舍之道与企业边界
  • 2024年中国新能源汽车用车发展怎么样 PaperGPT(二)
  • 论文笔记PhotoReg: Photometrically Registering 3D Gaussian Splatting Models
  • HAL 库句柄
  • uniapp 微信小程序开发使用高德地图、腾讯地图
  • 数学概念2
  • 细说STM32F407单片机CAN基础知识
  • (二)当人工智能是一个函数时,怎么去训练它?
  • CGAL windows 安装教程
  • 大厂高频总线协议面试题及参考答案(几百家面试题挑选最高频精华)
  • 斗鱼Android面试题及参考答案