在设备轮换时以编程方式更新窗口小部件宽度

时间:2014-12-28 14:08:06

标签: android android-appwidget

我正在处理小部件,当设备从纵向旋转到横向和横向到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。

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

由于

1 个答案:

答案 0 :(得分: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);
    }

在更新方法中: 检查配置并相应地致电:

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

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

这样就可以根据当前状态选择布局。