通常您会使用setImageResource 方法将图像设置在ImageButton 的表面上(ImageButton 从ImageView 继承它),但该方法不适用于RemoteViews。
设置图像的代码(例如,在 BroadcastReceiver 的 onReceive 方法中)如下所示:
@Override
public void onReceive(Context context, Intent intent) {
int appWidgetId = intent.getIntExtra("appWidgetId", -1);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
views.setImageViewResource(R.id.imageButton1, R.drawable.awesome_image);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
请注意,上面的代码假设您已使用键“appWidgetId”将要操作的小部件的 id 添加为广播意图的额外内容(包装在用户单击 ImageButton 时发送的 PendingIntent 中)。您很可能希望在 AppWidgetProvider 的 onUpdate 方法中执行此操作,如下所示:
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int i = 0; i < appWidgetIds.length; i++) {
int appWidgetId = appWidgetIds[i];
Intent intent = new Intent ("YourActionHere");
intent.putExtra("appWidgetId", appWidgetId);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, i, intent, 0);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
views.setImageViewResource(R.id.imageButton1, R.drawable.initial_image);
views.setOnClickPendingIntent(R.id.imageButton1, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}