首先来看下我们要做的功能:类似百度搜索的插件,一个应用中有多种样式的Widget
首先来看下我们的项目的目录结构
如果你想做两个不同的样式,就要有两个AppWidgetProvider的子类,具体的相关Widget基础知识可以查看我的博客关于Widget的内容:http://blog.csdn.net/caicongyang/
如何保证在在两个小插件同时拉到桌面上是都能用呢?下面是AppWidgetProvider的子类的关键code
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
int n = appWidgetIds.length;
for (int i = 0; i < n; i++) {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.simple);
appWidgetManager.updateAppWidget(new ComponentName(context, SimpleWidget.class), views); //SimpleWidget.class是类名
}
}
在每一个继承AppWidgetProvider的子类中的onUpdate方法都必须循环遍历appWidetIds数组,并且在更新自己的RemoteViews视图。
最后不要忘记在配置文件里配置你的widget
<receiver
android:name="com.bonson.etqqt.TerminalWidget"
android:label="@string/application_name" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/complex_widget" />
</receiver>
<receiver
android:name="com.bonson.etqqt.SimpleWidget"
android:label="@string/application_name" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/simple_widget" />
</receiver>