在设备旋转时以编程方式更新小部件宽度 - 高度

Vin*_*kla 5 android android-appwidget

我正在处理小部件,当设备从纵向旋转到横向和横向旋转到纵向时,我需要以编程方式控制小部件的宽度和高度。为此,当配置更改时,我调用以下代码以编程方式更新小部件宽度:

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);
}
Run Code Online (Sandbox Code Playgroud)

在此之后,我使用新值调用onAppWidgetOptionsChanged()但小部件不会调整大小。

但是我也在调用onUpdate()

minSdkVersion 是 16。

我搜索了很多但找不到与此问题相关的内容,感谢您的宝贵时间。

谢谢

Gab*_*l H 3

好的,这是我认为可行的解决方法:

创建 2 种不同的布局(widgetHorizo​​n、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);
    }
Run Code Online (Sandbox Code Playgroud)

在 on update 方法中:检查配置并相应调用:

RemoteViews views = new RemoteViews(getPackageName(),R.Layout.widgetHorizon)

RemoteViews views = new RemoteViews(getPackageName(),R.Layout.widgetVertical)
appWidgetManager.updateAppWidget(appWidgetId, views);
Run Code Online (Sandbox Code Playgroud)

这样布局将根据当前状态进行选择。