Bar*_*oid 62 android android-widget
我刚刚完成了我的Android小部件.现在我需要有不同大小的这个wiget供用户选择.例如,我需要一个中型,小型和大型小部件.因此,当用户安装应用程序并按住主屏幕然后选择小部件时,在小部件菜单中我希望他看到具有相同应用程序名称但具有大小的三个小部件.这样的事情:
helloSmall helloMedium helloLarge
我准备好了中等版本但是如何在同一个应用程序中制作小型和大型?知道所有三种尺寸都包含相同的确切数据和动作,只是尺寸和背景不同.
谢谢.
Mar*_*k B 101
您需要清单文件中每种类型的接收器定义,例如:
<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>
Run Code Online (Sandbox Code Playgroud)
这将允许您将相同的AppWidgetProvider类用于多个窗口小部件,并在<appwidget-provider>XML中定义不同的窗口小部件名称和不同的大小.
现在,如果您的小部件需要比<appwidget-provider>XML 中的更多差异,我将创建一个基本小部件类,它实现不同类型之间的所有常见行为:
public abstract class MyBaseWidget extends AppWidgetProvider
Run Code Online (Sandbox Code Playgroud)
然后你的每个具体实现都可以扩展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>
Run Code Online (Sandbox Code Playgroud)
小智 11
大家好,我有同样的问题.
您还需要实际添加第二个小部件提供程序;
<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>
Run Code Online (Sandbox Code Playgroud)
请享用
小智 5
好的,基本上你需要:
每个小部件前的布局文件.例如:main_small.xml,main_medium.xml ......
在xml目录中为每个窗口小部件添加提供程序.例如:small_provider.xml,medium_provider.xml ...等等(注意,如果没有xml目录,请将其添加到drawable目录下).
怎么办!
在清单中为每个小部件定义一个接收器.(就像主要答案中的例子一样)
您可以使用相同的布局或不同的布局.基本上这取决于你.
在你的提供者中你应该有这样的东西:
Run Code Online (Sandbox Code Playgroud)<?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" />
确保为每个提供程序指定要使用的目标布局文件.在这段代码中,我要求布局目录中的文件main.xml.对于我的中型小部件,例如我将有另一个提供商具有相同的确切代码,但我将更改最后一行
> android:initialLayout="@layout/medium".
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助,如果不让我知道,我可以在我的网站上传一个工作示例,你可以仔细看看它.请让我知道它是怎么回事.
祝你好运.
| 归档时间: |
|
| 查看次数: |
30143 次 |
| 最近记录: |