Android
Widgets
Recherche…
Remarques
SDv
Déclaration Manifeste -
Déclarez la classe AppWidgetProvider
dans le fichier AndroidManifest.xml
votre application. Par exemple:
<receiver android:name="ExampleAppWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/example_appwidget_info" />
</receiver>
Métadonnées
Ajoutez les métadonnées AppWidgetProviderInfo dans res/xml
:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="40dp"
android:minHeight="40dp"
android:updatePeriodMillis="86400000"
android:previewImage="@drawable/preview"
android:initialLayout="@layout/example_appwidget"
android:configure="com.example.android.ExampleAppWidgetConfigure"
android:resizeMode="horizontal|vertical"
android:widgetCategory="home_screen">
</appwidget-provider>
Classe AppWidgetProvider
Le rappel AppWidgetProvider
plus important est onUpdate()
. Il est appelé à chaque fois qu'un appwidget est ajouté.
public class ExampleAppWidgetProvider extends AppWidgetProvider {
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;
// Perform this loop procedure for each App Widget that belongs to this provider
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
// Create an Intent to launch ExampleActivity
Intent intent = new Intent(context, ExampleActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
// Get the layout for the App Widget and attach an on-click listener
// to the button
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout);
views.setOnClickPendingIntent(R.id.button, pendingIntent);
// Tell the AppWidgetManager to perform an update on the current app widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
}
onAppWidgetOptionsChanged()
est appelée lorsque le widget est placé ou redimensionné.
onDeleted(Context, int[])
est appelé lorsque le widget est supprimé.
Deux widgets avec une déclaration de mise en page différente
- Déclarez deux récepteurs dans un fichier manifeste:
<receiver
android:name=".UVMateWidget"
android:label="UVMate Widget 1x1">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_1x1" />
</receiver>
<receiver
android:name=".UVMateWidget2x2"
android:label="UVMate Widget 2x2">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_2x2" />
</receiver>
- Créer deux mises en page
-
@xml/widget_1x1
-
@xml/widget_2x2
-
- Déclarez la sous-classe
UVMateWidget2x2
de la classeUVMateWidget
avec un comportement étendu:
package au.com.aershov.uvmate;
import android.content.Context;
import android.widget.RemoteViews;
public class UVMateWidget2x2 extends UVMateWidget {
public RemoteViews getRemoteViews(Context context, int minWidth,
int minHeight) {
mUVMateHelper.saveWidgetSize(mContext.getString(R.string.app_ws_2x2));
return new RemoteViews(context.getPackageName(), R.layout.widget_2x2);
}
}
Créer / intégrer un widget de base en utilisant Android Studio
Dernier Android Studio va créer et intégrer un widget de base à votre application en 2 étapes.
Droit sur votre application ==> Nouveau ==> Widget ==> Widget App
.
Il affichera un écran comme ci-dessous et remplira les champs
C'est fait.
Il va créer et intégrer un widget HelloWorld de base (y compris un fichier de mise en page, un fichier de métadonnées, une déclaration dans un fichier manifeste, etc.) à votre application.