首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在同一个app中添加多个widget?

如何在同一个app中添加多个widget?
EN

Stack Overflow用户
提问于 2010-04-03 10:04:20
回答 3查看 37K关注 0票数 64

我刚刚完成了我的Android小工具。现在我需要有不同大小的这个小部件供用户选择。

例如,我需要一个中、小和大尺寸的小部件,所以当用户安装应用程序并按住主屏幕然后选择小部件时,我希望他在小部件菜单中看到三个具有相同应用程序名称但大小相同的小部件。如下所示:

helloSmall helloMedium helloLarge

我已经准备好了中号的,但我如何在同一个应用程序中添加小的和大的?知道所有三种大小都包含完全相同的数据和操作,只是大小和背景不同。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-03 10:42:27

您需要在清单文件中为每种类型定义一个接收器,如下所示:

代码语言:javascript
复制
    <receiver android:name=".MyWidget" android:label="@string/medium_widget_name">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider"
            android:resource="@xml/medium_widget_provider" />
    </receiver>

    <receiver android:name=".MyWidget" android:label="@string/large_widget_name">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider"
            android:resource="@xml/large_widget_provider" />
    </receiver>

这将允许您将相同的AppWidgetProvider类用于多个小部件,这些小部件具有不同的小部件名称和在<appwidget-provider> XML中定义的不同大小。

现在,如果您的小部件需要比<appwidget-provider> XML中更多的差异,我将创建一个实现不同类型之间所有公共行为的基本小部件类:

代码语言:javascript
复制
public abstract class MyBaseWidget extends AppWidgetProvider

然后,您的每个具体实现都可以扩展MyBaseWidget。然后,在您的清单文件中,您将为每个具体实现定义一个接收器,如下所示:

代码语言:javascript
复制
    <receiver android:name=".MyMediumWidget" android:label="@string/medium_widget_name">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider"
            android:resource="@xml/medium_widget_provider" />
    </receiver>

    <receiver android:name=".MyLargeWidget" android:label="@string/large_widget_name">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider"
            android:resource="@xml/large_widget_provider" />
    </receiver>
票数 101
EN

Stack Overflow用户

发布于 2011-02-07 19:01:14

实际上,每个小部件的android:name都必须不同。如果您按照示例执行此操作,则在小部件列表中将只有一个小部件可见。

票数 26
EN

Stack Overflow用户

发布于 2011-04-21 07:00:50

伙计们,我也有同样的问题。

实际上,您还需要添加第二个小部件提供程序;

代码语言:javascript
复制
<receiver android:name=**".MyWidget**" android:label="@string/medium_widget_name">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
        android:resource="@xml/medium_widget_provider" />
</receiver>

<receiver android:name=**".MyWidget2"** android:label="@string/large_widget_name">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
        android:resource="@xml/large_widget_provider" />
</receiver>

尽情享受

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2570004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档