android桌面部件开发教程,Android桌面小部件AppWidget开发
Android桌面小部件AppWidget开发
在Android我们经常可以看到各种桌面小部件,比如时钟、天气、音乐播放器等等。我们可以使用AppWidgetProvider来实现小部件的开发。
AppWidgetProvider是Android中提供的用于实现桌面小工具的类,其本质是一个广播,即BroadcastReceiver。
开发一个桌面小部件的步骤:
一、自定义小部件界面
在res/layout/下新建一个布局文件,名称和内容自定义,看你想把小工具做成什么样。需要注意的是系统默认的小工具布局中只支持以下这些标签,如果用了列表以外的标签,会导致小工具加载错误:
FrameLayout、LinearLayout、RelativeLayout
TextClock、Button、Chronometer、ImageButton、ImageView、ProgressBar、TextView
比如,我们创建了一个名为widget_layout.xml的布局文件:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
android:id="@+id/doge_imageView"
android:layout_width="110dp"
android:layout_height="110dp"
android:src="@drawable/doge" />
二、定义小部件配置信息
定义小部件的配置信息需要在res目录下新建一个xml目录,然后在res/xml/目录下创建一个配置文件,配置文件名称随意。新建app_widget_provider_info.xml:
android:initialLayout="@layout/widget_layout"
android:minHeight="110dp"
android:minWidth="110dp"
android:previewImage="@drawable/doge"
android:updatePeriodMillis="864000" />
上面的参数意义很明确,initialLayout指小部件的初始化布局,一般与最终布局相同;minHeight和minWidth定义了小部件的最小宽高,与小部件所占网格大小有关;previewImage可以指定在添加小部件时看到的预览图;updatePeriodMillis指定了小部件的自动更新周期,单位为毫秒。
小部件最小宽高选取.png
三、定义小部件类,继承自AppWidgetProvider
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.RemoteViews;
import android.widget.Toast;
/**
* @author zhengxuze
* @date 2017/1/10 create
*/
public class TestWidgetProvider extends AppWidgetProvider {
public static final String CLICK_ACTION = "com.seewo.appwidgettest.action.CLICK"; // 点击事件的广播ACTION
/**
* 每次窗口小部件被更新都调用一次该方法
*/
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
Intent intent = new Intent(CLICK_ACTION);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, R.id.doge_imageView, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.doge_imageView, pendingIntent);
for (int appWidgetId : appWidgetIds) {
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
}
/**
* 接收窗口小部件点击时发送的广播
*/
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (CLICK_ACTION.equals(intent.getAction())) {
Toast.makeText(context, "hello dog!", Toast.LENGTH_SHORT).show();
}
}
/**
* 每删除一次窗口小部件就调用一次
*/
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
super.onDeleted(context, appWidgetIds);
}
/**
* 当最后一个该窗口小部件删除时调用该方法
*/
@Override
public void onDisabled(Context context) {
super.onDisabled(context);
}
/**
* 当该窗口小部件第一次添加到桌面时调用该方法
*/
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
}
/**
* 当小部件大小改变时
*/
@Override
public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) {
super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions);
}
/**
* 当小部件从备份恢复时调用该方法
*/
@Override
public void onRestored(Context context, int[] oldWidgetIds, int[] newWidgetIds) {
super.onRestored(context, oldWidgetIds, newWidgetIds);
}
}
四、在AndroidManifest.xml中声明小部件
android:name="android.appwidget.provider"
android:resource="@xml/app_widget_provider_info" />
OK,小部件完成了,运行一下看看效果:
android桌面部件开发教程,Android桌面小部件AppWidget开发相关推荐
- Jetpack Compose教程-水位控制小部件
Jetpack Compose教程-水位控制小部件 Apple的应用程序和小部件一直是设计的典范,也给我们的"复制系列:活动应用"和"卡片应用"提供了灵感.当他 ...
- ArcGIS Maritime Server 开发教程(六)Maritime Service 开发技巧
ArcGIS Maritime Server 开发教程(六)Maritime Service 开发技巧 本章导读:GIS 开发人员基于 Maritime Service 开发海图应用时总会遇到与海图数 ...
- ArcGIS Maritime Server 开发教程(四)Maritime Service 开发实践
ArcGIS Maritime Server 开发教程(四)Maritime Service 开发实践 本章导读:Maritime Service 属于 MapService 的一个扩展,大部分功能继 ...
- SAP UI5 应用开发教程之八十二 - 采用 OPA5 开发支持页面跳转的 SAP UI5 集成测试用例试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- android的webView的教程,Android WebView 应用界面开发教程
WebView组件本身就是一个浏览器实现,Android5.0增强的WebView基于Chromium M37,直接支持WebRTC.WebAudio.WebGL.开发者可以直接在WebView中使用 ...
- Android-自定义桌面小部件【完成小米MIUI小部件】
最近相信大家都坐着小板凳听了MIUI的内容吧.当然了MIUI小部件可以说让MIUI上档次了许多,作为开发者的你是否为之惊叹?当然了我看到了许多的貌似自定义的简单操作,当然了大多数都是可爱简约的背景加动 ...
- android开发教程,android开发入门教程
所谓知己知彼才能百战百胜,想学好android就必须先了解 android是什么意思 android环境搭建 Android一词的本义指"机器人",同时也是Google于2007年 ...
- android项目开发教程,Android项目开发教程
Android项目开发教程 编辑 锁定 讨论 上传视频 Android项目开发教程 书 名 Android项目开发教程 作 者 车金庆.何征天.李琳.严正宇.周凌翱 类 别 图书&g ...
- 安卓底层linux开发教程,Android手机平台移植与底层开发 PDF
支持Android的热门ARM硬件平台简介 ARMv7架构SOC l TI OMAP系列,2009年OMAP3和OMAP4关注度较高 l Freescale i.MX51系列 l Qualcomm 8 ...
- android studio百度地图教程,Android studio百度地图SDK开发 2020最新超详细的Android 百度地图开发讲解(4) 路线规划之起始点地址输入实现规划...
实现起始点输入的路线规划 要实现输入起始点的路线规划,需要两个输入框,可以将两个输入框设置在和地图同一个Activity中,也可以新建一个Activity,来实现地址的输入,然后通过页面之间的跳转来传 ...
最新文章
- python人脸识别plc_三个Python项目实战,打造人脸识别系统!
- 看懂SqlServer查询计划
- u852日期限制解决补丁_用友U8hotfix和补丁包替换原则及注意事项
- linux ftp下载文件_Linux系统中10个使用Wget命令下载文件示例
- C语言中main函数的研究,以及对代码断点调试的研究(王爽老师 汇编语言)
- 大幅面多相机高精度定位及测量解决方案
- 使用环境变量来配置 Teams App 的 manifest
- NMEA码详解【转】
- 高级语言程序设计C试卷答案,2018高级语言程序设计考卷B及参考答案.docx
- spring事务分类简述
- 1.6.jquerymobile--列表
- php_字符编码浅谈_积累中。。。
- kettle配置集群_KETTLE集群搭建
- spring的依赖注入的方式(待更新)
- 2022年CXO领导力峰会暨IT东方会技术高管年会
- Axure9(基础二)
- 百新谷PCB在线下单+ERP智能生产管理系统--实施篇
- Yolov3没框原因和解决办法
- CAPL基础篇-----CAPL中的循环
- Coding and Paper Letter(七十六)