这篇文章主要介绍了 Android 开发之 App widget 用法, 结合实例形式详细分析了 Android 开发中使用 App widget 组件的具体步骤与相关技巧, 具有一定参考借鉴价值, 需要的朋友可以参考下
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 "安卓" 或 "安致"。
本文实例讲述了 Android 开发之 App widget 用法。分享给大家供大家参考,具体如下:
放在桌面上的控件叫做——App widget,例如可以在桌面上添加按钮、图片等等控件,例如桌面播放器的控制面板
AppWidgetProviderInfo 对象,它为 App Widget 提供元数据,包括布局、更新频率等等数据,这个对象不是由我们自己生成的,而是由 android 自己定义配置完成,这个对象被定义在 XML 文件中
1、定义 AppWidgetProviderInfo 对象,在 res/xml 文件夹当中定义一个名为 widget_config.xml 文件
- <?xml version="1.0" encoding="utf-8"?>
- <appwidget-provider
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:minWidth="300dp"
- android:minHeight="72dp"
- android:updatePeriodMillis="0"
- android:initialLayout="@layout/widget_ui"
- >
- </appwidget-provider>
备注:建立的文件夹名一定是 xml,因为只有这样才能被 R 识别
2、AppWidgetProvider 定义了 App Widget 的基本生命周期
- public class MyWidgetProvider extends AppWidgetProvider {
- public static int Tag;
- public int max;
- public int current;
- @Override
- public void onEnabled(Context context) {
- super.onEnabled(context);
- System.out.println("第一次被创建时调用这个方法");
- }
- @Override
- public void onDisabled(Context context) {
- System.out.println("当最后一个App Widget被删除时调用该方法");
- }
- @Override
- public void onReceive(Context context, Intent intent) {
- //调用父类的onReceive方法不能少,否则就无法监听到onUpdate事件了
- super.onReceive(context, intent);
- System.out.println("接收广播事件");
- }
- @Override
- public void onUpdate(Context context, AppWidgetManager appWidgetManager,
- int[] appWidgetIds) {
- System.out.println("在到达指定的更新时间之后或者当用户向桌面添加App Widget时调用这个方法");
- for(int i = 0; i < appWidgetIds.length; i++){
- Intent intent = new Intent(context, HB.class);
- PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
- //R.layout.widget_ui指的是显示在桌面上的控件布局
- RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_ui);
- //R.id.widgetButton指的是为桌面控件按钮绑定事件
- remoteViews.setOnClickPendingIntent(R.id.widgetButton, pendingIntent);
- //updateAppWidget方法更新remoteViews
- appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
- }
- }
- }
- @Override
- public void onDeleted(Context context, int[] appWidgetIds){
- System.out.println("App Widget被删除时调用这个方法");
- }
- }
3、添加一个布局文件 res/layout/widget_ui.xml(在桌面上显示的内容)
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- <Button
- android:id="@+id/widget_BT_Up"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="Value++"/>
- <Button android:id="@+id/widget_BT_Down"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Value--"
- android:layout_weight="1"/>
- </LinearLayout>
android:resource="@xml/widget_config" 指明显示 widget_config.xml 是 appwidget 的属性初始化设置
android:name="android.appwidget.action.APPWIDGET_UPDATE" 是 android 系统提供判定是 appwidget 的处理方式
android:name=".MyWidgetProvider" 表示处理的类,即继承了 AppWidgetProvider 类的类
- <receiver android:name=".MyWidgetProvider" android:label="myWIdget" android:icon="@drawable/icon">
- <intent-filter>
- <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
- </intent-filter>
- <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_config"/>
- </receiver>
备注:App Widget 和我们应用程序运行在不同的进程中 (App Widget 当中的 View 运行在 Home Screen 进程中),因此要用到 RemoteViews 和 PendingIntent 这两个类来操控桌面的控件
如果你的 onDelete、onUpdate 等事件没有触发,那么一个重要的原因是,你 override 了 onReceive 事件,但是又没有调用 super.onReceive(),所以导致这之后的事件都不会触发,AppWidgetProvider 的事件处理机制是,onRecieve 首先触发,然后由 onReceive 去触发后续事件。
希望本文所述对大家 Android 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0329/231903.html