- 浏览: 433664 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
yehuiyan8002:
支持中文查询
快熟查找联系人 -
lehehe:
现成的接口,免费试用,http://www.haoservic ...
天气Widget -
D.Z:
android:focusable="false&q ...
CheckBox在ListView 而导致其OnItemClickListener不会被触发 -
freecode:
碰到该问题,CheckBox的android:focusabl ...
CheckBox在ListView 而导致其OnItemClickListener不会被触发 -
echohfut:
哥们,新博客是不是在墙外啊?不能访问。还有你怎么进行博客迁移的 ...
博客 迁移
widge
[功能]
widget开发和别的应用程序还是有点不同的 因为其使用比较麻烦 所以今天打算建一个widget模版 把一些固定的东西写死 而把具体定制化内容 的地方 告诉大家 以后要使用的话 直接移过去就可以了
[思路]
1. 一个最基本的widget 的内容
2. 扩展内容 包括:
* startActivity(Intent)
* sendBroadcast(Intent)
[代码 步骤]
1. 创建无用的 initialActivity 用途是:运行该应用程序用 设置其属性为:
<activity android:name=".initialActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
2. 定义该woidge 所包含的View 及 布局 wlayout.xml :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/text" android:textSize="12px" android:textStyle="bold|italic" android:textColor="#008800" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/next" android:text="Next!" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
2. 定义该widget所需的属性文件 R.xml.wattra.xml 包括:
写道
1. 占用大小
2. 更新频率
3. 布局文件
2. 更新频率
3. 布局文件
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="246dip" android:minHeight="22dip" android:updatePeriodMillis="1000" android:initialLayout="@layout/wlayout" />
3. 在提及widget之前 说说widget 的原理
写道
1.其实 widget 也是一种 BroadcastReceiver
2.其action = “android.appwidget.action.APPWIDGET_UPDATE”
2.其action = “android.appwidget.action.APPWIDGET_UPDATE”
写道
所以 我们的工作就是: 实现 AppWidgetProvider 的方法:
void onUpdate(Context context,
AppWidgetManager appWidgetManager,int[] appWidgetIds)
但是 因为 AppWidgetProvider 特殊上下文Context 的缘故 很多方法不可用
所以 我们打算把具体的刷新工作放在Service 然后通过startService 来启动之
void onUpdate(Context context,
AppWidgetManager appWidgetManager,int[] appWidgetIds)
但是 因为 AppWidgetProvider 特殊上下文Context 的缘故 很多方法不可用
所以 我们打算把具体的刷新工作放在Service 然后通过startService 来启动之
写道
本文中 这个Service 就是:WidgetUpdate
该Service 的实现如下:
public static class WidgetUpdate extends Service { RemoteViews rview; public void onStart(Intent intent, int startId) { //to initial RemoteViews instance rview = new RemoteViews(getPackageName(), R.layout.wlayout); } @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } }
写道
可能很多人对 RemoteView 感动奇怪 问:为什么不要findViewById()
那是因为方法:findViewById() 只在 Activity 中才可见
而 RemoteView 的作用 还是贴一下source 里面的注释把。
/**
* A class that describes a view hierarchy that can be displayed in
* another process. The hierarchy is inflated from a layout resource
* file, and this class provides some basic operations for modifying
* the content of the inflated hierarchy.
*/
public class RemoteViews implements Parcelable, Filter
注意关键字: "in another process"
那是因为方法:findViewById() 只在 Activity 中才可见
而 RemoteView 的作用 还是贴一下source 里面的注释把。
/**
* A class that describes a view hierarchy that can be displayed in
* another process. The hierarchy is inflated from a layout resource
* file, and this class provides some basic operations for modifying
* the content of the inflated hierarchy.
*/
public class RemoteViews implements Parcelable, Filter
注意关键字: "in another process"
4. 因为widget 肯定要接收外界的一些信息/数据 而工具就是:BroadcastReceiver 所以需要定义一个BroadcastReceiver 我们定义其为:WidgetInfoListenerHelper
public class WidgetInfoListenerHelper extends BroadcastReceiver { Context context; WidgetInfoListenerHelper listener; //construct public WidgetInfoListenerHelper(Context c){ context = c; //to instance it listener = this; } public void registerAction(String action){ IntentFilter filter = new IntentFilter(); filter.addAction(action); context.registerReceiver(listener,filter); } @Override public void onReceive(Context arg0, Intent arg1) { // TODO Auto-generated method stub Bundle b = arg1.getExtras(); if(b.containsKey(HelloHelper.MessageWidgetText)){ String string = b.getString(HelloHelper.MessageWidgetText); updateText(string); } } }
写道
在WidgetUpdate.onStart() 注册为:
//to register an BroadcastReceiver to listen update message
WidgetInfoListenerHelper helper = new WidgetInfoListenerHelper(this);
helper.registerAction(HelloHelper.BroadcastHelloWidget);
//to register an BroadcastReceiver to listen update message
WidgetInfoListenerHelper helper = new WidgetInfoListenerHelper(this);
helper.registerAction(HelloHelper.BroadcastHelloWidget);
5. 其他:
* startActivity(Intenr)
写道
因为桌面的空间有限 所以一般只会在widget中显示一下粗略信息 当有比较多的信息时 把之放入Activity 而在widget上注册一个单击监听器 来启动目标Activity 来显示详细信息
public void setViewActivityClickListener(RemoteViews remte,int id,Intent i){ PendingIntent pi = PendingIntent.getActivity(this,1,i,0); remte.setOnClickPendingIntent(id, pi); }
如何使用:
setViewActivityClickListener(rview,R.id.text, new Intent(this,HelloActivity.class)); 如此 当点击View: R.id.text 就会进入目标Activity:HelloActivity
* sendBroadcast(Intent)
写道
上面有提过怎么接受Broadcast 那应该怎么发生Broadcast 呢? 也可以在View上 注册 监听器
public void setViewBroadcastClickListener(RemoteViews remte,int id,String filter){ Intent i = new Intent(filter); PendingIntent pi = PendingIntent.getBroadcast(this,1,i,0); remte.setOnClickPendingIntent(id, pi); }
如何使用:
setViewBroadcastClickListener(rview,R.id.next,HelloHelper.BroadcastDestTaskNext); 如此 当点击View:R.id.next 就会发生 action=HelloHelper.BroadcastDestTaskNext 的 BroadcastReceiver
5. 最后一个问题:改动widget显示的内容, 比如:
* 改动文字:
RemoteViews.setTextViewText()
* 改动图片资源
RemoteViews.setImageViewBitmap()
*
写道
补充 任何View 改动 都必须 刷新widget 才会生效 如何刷新
public void notifyViewChanged(){
// Push update for this widget to the home screen
ComponentName batteryWidget = new ComponentName(this, HelloWidget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(batteryWidget, rview);
}
public void notifyViewChanged(){
// Push update for this widget to the home screen
ComponentName batteryWidget = new ComponentName(this, HelloWidget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(batteryWidget, rview);
}
6. emulator 运行截图:
done!
- HelloWidget.rar (36.7 KB)
- 下载次数: 592
评论
3 楼
pop1030123
2011-11-02
好文。凑字。
2 楼
pop1030123
2011-11-02
WidgetMoniter服务没有在manifest文件中注册。
1 楼
rongchengzhuang
2010-04-29
弓虽大,受教了
发表评论
-
滑动抽屉 另一种解决办法
2010-07-09 17:43 0滑动抽屉 -
Spinner 定制化 增强版
2010-07-09 14:34 2609Spinner 作为下拉选 ... -
ListView 内容之分批显示
2010-06-25 20:38 5925ListView 内容循环显示 大家试想 假如 ... -
MediaScanner 研究
2010-06-23 15:21 3170MediaScanner 之所以拿MediaSc ... -
CheckBox在ListView 而导致其OnItemClickListener不会被触发
2010-06-22 20:55 19015CheckBox在ListView 而导致其OnItemCli ... -
获取Launcher 启动列表
2010-06-22 10:09 3138获取Launcher 启动列表 即 列出所有Launc ... -
PreferenceActivity 全接触
2010-06-19 12:53 9440PreferenceActivity 为了引入 ... -
android src 下载 编译 安装 全接触
2010-06-12 14:44 0android src - download install ... -
Intent.createChooser() 妙用
2010-06-12 11:14 5955Intent.createChooser(ntent targ ... -
SMS管理:收信箱 发信息 编写新信息
2010-06-07 08:14 14445SMS管理 [功能] 1. 收信箱:显示 ... -
求 android 手机 帮忙测试sms服务系统 谢谢
2010-06-05 08:25 1452Hi guys, 最近一段时间没有更新blog 因为一 ... -
流媒体 播放 理论篇
2010-05-28 14:42 2224流媒体播放 之所以为理论篇 因为该篇仅实现了播放功能 ... -
NDK 搭建与HelloWorld
2010-05-19 09:48 3225NDK [前提] 1. Cygwin 用于安装 ... -
自定义字体
2010-05-15 10:49 1221自定义字体: []代码 步骤] 1 ... -
模糊查找 再深入
2010-05-15 09:41 3158模糊查找 再深入 应某位大哥要求 再次对 SQLite ... -
快捷方式Bar + ViewGroup - 自定义
2010-05-09 09:20 2470TabActivity - 自定义 其实 这篇感觉极鸡 ... -
View 拖动&插入 研究
2010-05-09 07:14 3985View 拖动&插入 即: ... -
带图标 快捷键 Menu - 终极版
2010-05-04 20:23 1837Menu 改头换面 扩展如下: 1. 图标化文字 2 ... -
*.gif 解码 - 实践
2010-05-02 18:58 1737*.gif decode 前面已经说过 今天不打算再说了 ... -
*.gif 解码 - 理论
2010-05-01 21:11 1522我们知道Android 默认是不支持*.gif 的 但是 ...
相关推荐
创建AppWidget的第一步是在AndroidManifest.xml文件中注册AppWidget提供者。你需要指定一个唯一的AppWidgetProviderInfo,它包含了关于AppWidget尺寸、初始布局等信息。例如: ```xml ...
在Qt框架中,动态添加子Widget是一项常见的任务,特别是在创建可扩展或自适应用户界面时。Qt5及以上版本提供了丰富的API来实现这一功能。本文将深入探讨如何在Qt5及更高版本中动态地向父Widget添加子Widget,以及...
在Android开发中,`appWidget` 是一种可以在用户主屏幕上显示的小部件,它提供了一种无需打开应用程序就能与用户交互的方式。本篇文章将深入探讨如何使用`appWidget`来启动一个`Activity`。 首先,我们需要了解`app...
移动Widget是互联网技术发展下的产物,是一种小型的应用程序,可在各种平台上展示个性化信息。本报告旨在分析当前移动Widget的市场状况,探讨其起源和发展历程,以及典型成功案例,为运营商提供策略建议。 【详细...
这是一个MP3程序,这个程序不仅仅带Activity,还有一个桌面Widget,同时是可以运行的源代码。可以通过桌面Widget控制后台音乐的播放,也可以点击Widget上面的LOGO进入应用程序。 涉及到了,一个基本的widget程序的大...
在本例中,我们关注的是一个特定类型的AppWidget,它显示时间并每秒更新一次。创建这样一个实时更新的时钟AppWidget涉及到多个关键知识点。 首先,我们需要了解`AppWidgetProvider`。它是AppWidget的主要组件,类似...
标题中的“android axure widget包”指的是一个专门为Android平台设计的Axure组件集合,包含了一系列Android应用中常见的小部件(Widget)模板,如按钮、滑块、开关、列表视图等。这些组件设计得与Android原生UI风格...
1. **创建AppWidget**: 首先,你需要创建一个AppWidget,定义其布局和行为。这包括在`res/xml/app_widget_info.xml`中配置AppWidget的元数据,以及在`BroadcastReceiver`子类中处理用户的点击事件。 2. **配置...
要获取Widget的位置和大小,可以使用QWidget的geometry()方法,它返回一个QRect对象,包含了Widget的左上角坐标(x, y)和宽度(width)与高度(height)。同样,也可以使用pos()方法获取相对父Widget的坐标,size()方法...
Widget,这个词源自英语,是一个通用术语,用来描述各种小型应用程序或组件,它们可以在不同平台上以小窗口或小框的形式呈现,为用户提供便捷的功能或信息展示。Widget广泛应用于网页、系统桌面、移动设备以及社交...
在Android平台上,Widget小组件是应用在主屏幕上提供快速访问或简单交互的一种方式。它们可以显示实时信息,比如天气、时钟或者新闻摘要,而无需用户打开完整的应用程序。本资料包"androidWidget小组件开发.zip"包含...
综上所述,Dojo的Widget标签开发是一项核心技能,它涵盖了类的继承、模板设计、事件处理、数据绑定等多个方面。通过熟练掌握这些知识点,开发者能够在Dojo框架下构建出功能强大、易维护的Web应用。
本文将深入探讨Android AppWidget的第四部分,主要关注如何更新AppWidget中的控件,以及相关的源码和工具。 **一、AppWidget更新机制** 1. **AppWidgetProvider**: 这是所有AppWidget的核心组件,它是一个...
在Android平台上,appWidget是一种小型的应用程序组件,它可以在用户的主屏幕上显示实时更新的信息,比如天气、新闻或者就像本例中的“每日一句”。这个“Android appWidget每日一句修正1”项目是针对原版appWidget...
**Widget技术概述** Widget在IT领域中通常指的是小型应用程序或组件,它们可以在各种操作系统或平台上运行,提供便捷的功能访问或信息展示。Widget开发是构建用户界面(UI)和增强用户体验的重要部分,尤其在移动...
AppWidget,即桌面小部件,是Android系统提供的一种允许应用程序在主屏幕放置动态更新的组件,用户无需打开完整应用即可查看信息或进行简单交互。本文将全面解析AppWidget的工作原理、生命周期、启动运行过程以及...
首先,为了创建一个包含ListView的Android Widget,我们需要在`res/xml`目录下创建一个新的XML布局文件,例如`widget_list_view.xml`。在这个文件中,定义一个ListView作为根元素,并设置相应的属性,如ID和样式: ...
### 做一个自己的Widget引擎-移动互联网hot #### Widget概览 Widget,或称微技,是一种基于Web的小型应用程序,它能够脱离传统的Web浏览器环境独立运行,并专注于执行特定的功能,如显示天气预报、播放视频、提供...
本篇将深入探讨如何在自定义的Launcher中添加Widget,并通过源码分析来理解这一过程。 首先,我们来看“android Launcher添加widget”的核心概念。在Android中,Widget是一种轻量级的应用组件,可以在用户的主屏幕...
文件名"axure_ipad_widget_1.0"可能表示这是该模板库的第一个版本,意味着可能存在后续更新,以增加更多功能或优化现有组件。设计师应该关注这些更新,以便获取最新的设计资源和改进。 总的来说,这个"axure_ipad_...