【问题标题】:Updating app widget on orientation change在方向更改时更新应用小部件
【发布时间】:2015-05-31 09:43:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    回答我自己的问题。正确的方法不是检测方向变化(家庭启动器可能使用也可能不使用),而是拥有一个自动适应方向变化的小部件。有时它是微不足道的,有时它不是。以我为例,我需要显示一张横向位图和一张纵向位图。通过拥有两个 ImageView 解决了这个问题,一个是纵向启用(通过样式资源),另一个是横向启用。在 AppWidgetProvider 中,我填充了两个图像(在我的例子中是文件 URI)并让启动器选择它需要的方向。

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

    【讨论】:

    • 你有例子吗?我希望小部件刷新屏幕方向是否发生变化,因为它会改变小部件的大小,而现在没有发生。
    【解决方案2】:

    解决方案是使用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);
           }
        }
    }
    

    【讨论】:

    • 你已经写了 if(action.equals(action)) 。除非它是会导致 NPE 的空值,否则它总是正确的。你的意思是写别的吗?
    • 您还检查了extras,但从不使用它。
    猜你喜欢
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多