android小元件(widget)小结
android小部件(widget)小结
一、为widget添加点击事件
在继承自AppWidgetProvider类的onUpdate方法中添加监听并发送点击事件:
还必须在AndroidManifest.xml的receiver中添加相应的动作:
这样就可以在onReceive方法中通过
if ("com.zwq.taskMan".equals(intent.getAction())) {
}过滤到发送的监听事件了,在这儿可以做相应的事件处理。
二、点击widget时启动一个Activity:
可以将这个Widget的id传递给该Activity:
三、一个程序显示多个Widget,如果程序需要显示不同尺寸的widget,可以配置多个widget,具体就是要有多个provider,然后在androidmenifist里面配置多个receive:
四、更新Widget的图片:
只要在AppWidgetProvider的onReceive方法里面写上更新的代码即可:
特别注意:
当使用
更新时,没什么问题,View里面的图片可以完全更新,这样图片只能来自程序本身自带的。如果需要使用程序以外的图片就要用到:
具体问题参考老外的文章:http://code.google.com/p/android/issues/detail?id=8489
http://eyes-free.googlecode.com/svn/trunk/androidsays/src/com/google/marvin/androidsays/WidgetInterface.java
五、Widget不错的参考资料:
http://hi.baidu.com/tdskee/blog/item/3459249b3a6da1a1c9eaf4bc.html
http://hi.baidu.com/tdskee/blog/item/575bbcaf758559d87cd92abe.html
一、为widget添加点击事件
在继承自AppWidgetProvider类的onUpdate方法中添加监听并发送点击事件:
Intent actClick=new Intent("com.zwq.taskMan"); PendingIntent pending= PendingIntent.getBroadcast(context, 0, actClick, 0); RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget); rv.setOnClickPendingIntent(R.id.kill_all_image, pending); appWidgetManager.updateAppWidget(appWidgetIds, rv);
还必须在AndroidManifest.xml的receiver中添加相应的动作:
<action android:name="com.zwq.taskMan"></action>
这样就可以在onReceive方法中通过
if ("com.zwq.taskMan".equals(intent.getAction())) {
}过滤到发送的监听事件了,在这儿可以做相应的事件处理。
二、点击widget时启动一个Activity:
// Push newly updated widget to surface RemoteViews views = PhotoAppWidgetProvider.buildUpdate(this,mAppWidgetId, helper); // Intent actionIntent=new Intent(INTENT_FLAG); // PendingIntent pending= PendingIntent.getBroadcast(this, 0, actionIntent, 0); Intent actionIntent = new Intent(PhotoAppWidgetConfigure.this, Photo.class); PendingIntent pending = PendingIntent.getActivity(this, 0, actionIntent, 0); views.setOnClickPendingIntent(R.id.photo, pending);
可以将这个Widget的id传递给该Activity:
Bundle value = new Bundle(); value.putInt(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); actionIntent.putExtras(value);
三、一个程序显示多个Widget,如果程序需要显示不同尺寸的widget,可以配置多个widget,具体就是要有多个provider,然后在androidmenifist里面配置多个receive:
<receiver android:name=".PhotoProviderTwo" android:label="two"> <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_info_two"/> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> </receiver> <receiver android:name=".PhotoProviderThree" android:label="three"> <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_info_three"/> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> </receiver> <receiver android:name=".PhotoProviderFour" android:label="four"> <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_info_four"/> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> </receiver>
四、更新Widget的图片:
只要在AppWidgetProvider的onReceive方法里面写上更新的代码即可:
@Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Common.WIDGET_UPDATE_PHOTO)) { Bundle b=intent.getExtras(); String path=b.getString(Common.CURRENT_PHOTO_PATH); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.photo_frame); BitmapTool get = new BitmapTool(); Bitmap bitmap = get.getBitmap(path); bitmap = Bitmap.createBitmap(bitmap); views.setImageViewBitmap(R.id.widget_photo, bitmap); AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); appWidgetManager.updateAppWidget(new ComponentName(context,PhotoProviderThree.class), views); } super.onReceive(context, intent); }
特别注意:
当使用
views.setImageViewResource(R.id.widget_photo, R.drawable.background);
更新时,没什么问题,View里面的图片可以完全更新,这样图片只能来自程序本身自带的。如果需要使用程序以外的图片就要用到:
views.setImageViewBitmap(R.id.widget_photo, bitmap);这是要注意添加:
bitmap = Bitmap.createBitmap(bitmap);不然图片是不会更新的。还有就是图片不能太大,如果太大也是不能更新的!
具体问题参考老外的文章:http://code.google.com/p/android/issues/detail?id=8489
http://eyes-free.googlecode.com/svn/trunk/androidsays/src/com/google/marvin/androidsays/WidgetInterface.java
五、Widget不错的参考资料:
http://hi.baidu.com/tdskee/blog/item/3459249b3a6da1a1c9eaf4bc.html
http://hi.baidu.com/tdskee/blog/item/575bbcaf758559d87cd92abe.html