我正在处理小部件,当设备从纵向旋转到横向和横向到protrait时,我需要以编程方式控制窗口小部件的宽度和高度。 为此,当配置更改时,我调用以下代码以编程方式更新小部件宽度:
for (int id : appWidgetIds){
Bundle newOptions = appWidgetManager.getAppWidgetOptions(id);
int minWidth = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH, 0);
newOptions.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH, minWidth - 100);
appWidgetManager.updateAppWidgetOptions(id, newOptions);
}
在此之后,我会使用新值调用 onAppWidgetOptionsChanged(),但小部件不会调整大小。
但我也打电话给 onUpdate()。
minSdkVersion是16。
我搜索了很多,但找不到与此问题相关的内容,谢谢你提前花了宝贵的时间。
由于
答案 0 :(得分:3)
好的,这是一个我觉得可行的解决方法:
创建2个不同的布局(widgetHorizon,widgetVertical)。
配置更改的时间(我假设您正确地捕获它)
您发送更新意图如下:
private void sendUpdateBroadcastToWidget() {
Intent intent = new Intent(this,WidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
// Use an array and EXTRA_APPWIDGET_IDS instead of AppWidgetManager.EXTRA_APPWIDGET_ID,
// since it seems the onUpdate() is only fired on that:
int[] ids = {R.xml.quick_actions_widget};
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids);
sendBroadcast(intent);
}
在更新方法中: 检查配置并相应地致电:
RemoteViews views = new RemoteViews(getPackageName(),R.Layout.widgetHorizon)
RemoteViews views = new RemoteViews(getPackageName(),R.Layout.widgetVertical)
appWidgetManager.updateAppWidget(appWidgetId, views);
这样就可以根据当前状态选择布局。