Android 如何在同一个应用程序中添加多个小部件?
我刚刚完成我的Android小部件。现在我需要有不同大小的这个小部件供用户选择 例如,我需要一个中、小和大尺寸的小部件,因此当用户安装应用程序并保持主屏幕时,然后选择小部件,在小部件菜单中,我希望他看到三个具有相同应用程序名称但大小相同的小部件。大概是这样的: helloSmall 海洛米酒店 希腊语Android 如何在同一个应用程序中添加多个小部件?,android,android-widget,Android,Android Widget,我刚刚完成我的Android小部件。现在我需要有不同大小的这个小部件供用户选择 例如,我需要一个中、小和大尺寸的小部件,因此当用户安装应用程序并保持主屏幕时,然后选择小部件,在小部件菜单中,我希望他看到三个具有相同应用程序名称但大小相同的小部件。大概是这样的: helloSmall 海洛米酒店 希腊语 我已经准备好了中号的,但是如何在同一个应用程序中添加小的和大的呢?知道所有三种大小都包含相同的精确数据和操作,只是大小和背景不同。您需要清单文件中每种类型的接收器定义,如: <rec
我已经准备好了中号的,但是如何在同一个应用程序中添加小的和大的呢?知道所有三种大小都包含相同的精确数据和操作,只是大小和背景不同。您需要清单文件中每种类型的接收器定义,如:
<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>
然后,您的每个具体实现都可以扩展MyBaseWidget。然后,在清单文件中,每个具体实现都有一个接收方定义,如:
<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>
好的,因此基本上您需要: 每个小部件的布局文件。例如:main_small.xml、main_medium.xml 在xml目录中,为每个小部件添加一个提供程序。例如:small\u provider.xml、medium\u provider.xml。。。依此类推(请注意,如果没有xml目录,请将其添加到drawable目录下) 现在怎么办
- 在清单中为每个小部件定义一个接收者。(就像主要答案中的示例)
- 您可以使用相同的布局或不同的布局。基本上这取决于你
- 在您的提供商中,您应该有如下内容:
祝你好运。实际上,安卓:每个小部件的名称必须不同。如果您像示例中那样执行此操作,则在窗口小部件列表中只有一个窗口小部件可见。伙计们,我也遇到了同样的问题 您还需要实际添加第二个小部件提供者
<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>
享受其他答案的额外信息
- 如果您正在复制上述文件,并且如果您的小部件使用
来提供某些功能,则可能需要复制您的服务服务
- 如果复制
,请记住使用新服务更新清单,否则新服务将无法运行服务
如果您使用任何
BroadcastReceiver
将Intent
s发送到重复的服务
s。。。别忘了也要更新代码:
- 您现在必须将意向发送到每个服务的
AppWidgetProviderInfo
。这样可以得到如下布局:AppWidgetProviderInfo.initialLayout
。例如:AppWidgetProviderInfo-appInfo=appWidgetManager.getAppWidgetInfo(widgetId);appInfo.initialLayout代码>根据@jblz回答(澄清)是!!这就是问题所在!!我最终创建了另一个widget提供程序类,它只是扩展了第一个widget,然后在清单集中为两个widget创建了这两个类?
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="146dip"
android:minHeight="138dip"
android:updatePeriodMillis="10000"
android:initialLayout="@layout/main"
/>
> android:initialLayout="@layout/medium".
<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>