多种小部件尺寸

Posted

技术标签:

【中文标题】多种小部件尺寸【英文标题】:Multiple widget sizes 【发布时间】:2012-02-17 09:05:33 【问题描述】:

我在互联网上搜索,但没有任何帮助。我想做第二个小部件,只是更大。我使用服务来更新我的小部件,所以我需要创建 2 个服务(通过远程视图等更新小部件中的数据)或者我可以让它更容易吗?

当我添加中型小部件时,它会显示一个小部件,但它占用更多空间(144dp x 72dp)并且没有更新。也许我应该复制整个应用程序类并对其进行修改,但我认为这是愚蠢的解决方案。

我正在尝试这个解决方案

how to add multiple widgets in one app?

How to put multiple widget sizes in one apk?

有什么提示吗? :)

【问题讨论】:

这是我对您问题的理解。所以您有 2 个问题,它们是:1. 您有 2 个小部件,并且您希望第二个看起来更大 2. 您在小部件中更新数据时遇到问题。这些是你的问题吗? 【参考方案1】:

我对小部件也有同样的需求。正是您发布的这两个链接帮助我找到了解决方案,最后通过更多的研究得到了解决方案。

为了让您的小部件有第二个尺寸:

    在您的清单中定义另一个接收器,使用不同的名称。这很重要:如果您不使用其他名称,则可用小部件列表中只会显示一个。例如:android:name=".MyWidget_Small"android:name=".MyWidget_Medium"。也相应地修改标签

    附加接收器需要 res/xml 中的新应用小部件提供程序。在元数据标记的 android:resource 中键入另一个 XML 文件的名称。然后您将拥有android:resource="@xml/MyWidgetProvider_Small"android:resource="@xml/MyWidgetProvider_Medium"

    res/xml 中的每个 XML 文件都必须指向一个单独的布局。您将拥有android:initialLayout="@layout/MyWidget_Small"android:initialLayout="@layout/MyWidget_Medium"

    现在是 Java 部分。每个 appwidget 提供者都需要其对应的扩展 AppWidgetProvider 的 Java 类,因此您将需要两个额外的类。如果您的原始类是 MyWidget.java,您将添加 MyWidgetSmall.java 和 MyWidgetMedium.java。您最终可能会继承您原来的 Java 类,并且可能会修改每个新类,如果小部件在每种尺寸下都有不同的行为。请记住在接收者的 android:name 中像在步骤 1 中所做的那样命名这两个类

    您的服务不需要复制。但是,您应该检查您的源代码以查找对 MyWidget.class 的显式引用。如果你这样做了,你必须引用实际的子类

希望对你有帮助

【讨论】:

关于接收器的不同名称的评论非常好。我花了一个小时才意识到这一点,并找到了您的解决方案作为证明。 好..+1 . 是否可以在小部件单击时在同一个小部件上显示新布局...就像平滑日历一样.. @RanjitPati 有可能,考虑到每次更改其“结构”时都必须重建整个布局。除非您谈论的是像三星启动器或 Go Launcher 中的伪应用程序小部件之一

以上是关于多种小部件尺寸的主要内容,如果未能解决你的问题,请参考以下文章

根据父窗口小部件的宽度和高度放置一个自动调整大小的窗口小部件

各种屏幕的标准小部件尺寸

如何将小部件尺寸传递给 __init__

如何让 Flutter 小部件适应不同的屏幕尺寸

在卡片视图中排列小部件

当小部件尺寸与存储图像的尺寸不同时图像失真