我在小部件上工作,当设备从纵向旋转到景观,从风景到画像时,我需要通过编程控制小部件的宽度和高度。为此,当配置更改时,我调用以下代码以编程方式更新小部件宽度:
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岁。
我找了很多,但没有找到与这个问题有关的问题,感谢提前给你宝贵的时间。
谢谢
发布于 2015-01-01 15:23:44
好的,这里有一个我认为会奏效的解决办法:
创建两个不同的布局(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);
}在on方法中:检查配置并相应地调用:
RemoteViews views = new RemoteViews(getPackageName(),R.Layout.widgetHorizon)
RemoteViews views = new RemoteViews(getPackageName(),R.Layout.widgetVertical)
appWidgetManager.updateAppWidget(appWidgetId, views);这样,布局将根据当前状态进行选择。
https://stackoverflow.com/questions/27677162
复制相似问题