在方向更改时更新应用小部件

时间:2012-02-29 03:11:25

标签: android android-intent

我有一个主要活动和应用小部件的应用。每当屏幕方向发生变化时,都需要更新应用小部件(它会计算其位图大小,这取决于当前的方向)。

如何让小部件更新方向更改?我发现了ACTION_CONFIGURATION_CHANGED事件,但我不确定如何使用它,因为文档说它无法在清单中注册。

如果有帮助,我已经有了一个在午夜更新小部件的BroadcastReciever。

2 个答案:

答案 0 :(得分:2)

回答我自己的问题。正确的方法不是检测方向变化(可能会或可能不会由主启动器使用),而是要有一个自动适应方向变化的小部件。有时它是微不足道的,有时它不是。在我的例子中,例如我需要显示一个用于横向的位图和一个用于纵向的位图。解决了它有两个ImageViews,一个是纵向启用(按样式资源),另一个是横向启用。在AppWidgetProvider中,我填充了两个图像(在我的情况下是文件URI),让启动器选择它需要的方向。

了解设备方向更改非常重要,窗口小部件容器会重新创建布局(应用常规资源选择规则)并重播该布局上的RemoteViews命令。

答案 1 :(得分:1)

解决方案是使用onReceive()方法调用onUpdate()。这是我的代码:

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);  
    String action = intent.getAction();
    Toast.makeText(context, action, Toast.LENGTH_LONG).show();

    if (action.equals(action)) {
        Bundle extras = intent.getExtras();
        if (extras!=null) {
            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
            ComponentName thisAppWidget = new ComponentName(context.getPackageName(), WidNameWidgetActivity.class.getName());
            int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget);
            onUpdate(context, appWidgetManager, appWidgetIds);
       }
    }
}