Обновление ширины виджета – высота программно при вращении устройства

Я работаю над виджетами, где мне нужно управлять шириной и высотой виджета программным образом, когда устройство поворачивается от портрета к пейзажу и к пейзажному до протрайт. Для этого при изменении конфигурации я вызываю приведенный ниже код, чтобы обновить ширину виджета программно:

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.

Я много искал, но не мог найти связанных с этой проблемой, спасибо, если заранее для вашего драгоценного времени.

благодаря

ОК, это обходное решение, которое, я думаю, будет работать:

Создать 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); } 

В методе on update: проверьте конфигурацию и, соответственно, вызов:

 RemoteViews views = new RemoteViews(getPackageName(),R.Layout.widgetHorizon) RemoteViews views = new RemoteViews(getPackageName(),R.Layout.widgetVertical) appWidgetManager.updateAppWidget(appWidgetId, views); 

Таким образом макет будет выбран в соответствии с текущим статусом.