Widget erstellen

Widget erstellen

Heute wollen wir uns einmal mit der Thematik der Widgets unter Android beschäftigen und ein ganz simples aber funktionsfähiges Widget programmieren.

Unser Ziel wird es sein ein Widget zu programmieren, dass zwar ganz normal funktioniert, der Einfachheit halber aber nichts kann.

Vorbereitungen

Bevor wir mit unserem ersten Widget beginnen können, bedarf es ein paar wenigen Vorbereitungen.

Informationen

Zu aller erst müssen wir eine Datei zur Verfügung stellen, nach der Android weiß, um welches Widget es sich handelt, wie es heißt, wie groß es minimal und maximal sein darf, welche Klasse die Arbeit übernimmt und in welchen Intervallen unser Widget erneuert werden soll.

Wir erstellen also eine Datei namens “widget_info.xml”, indem wir sie in den Ordner res -> xml packen.
Besteht dieser Ordner noch nicht können wir ihn getrost selber erstellen.

Der Inhalt der neu erstellten Datei sieht bei mit wie folgt aus:





Über “updatePeriodMillis” legen wir fest, wie häufig das Widget erneuert werden soll. Die Angabe ist in Millisekunden zu machen. Wichtig wäre zu beachten, dass Android das Gerät jedes mal aufweckt, wenn dieser Intervall erreicht ist. Bitte bedenkt, dass jedes Aufwecken den Nutzer Akku kostet.

“previewImage” beschreibt den Pfad zu einem Vorschaubild des Widgets, welches im Widget-Auswahlmenü angezeigt wird. Wählt dieses Bild weise, nicht zu groß und nicht zu klein und achtet darauf, dass es nach Möglichkeit nur eine wirkliche Vorschau ohne Schnickschnack anzeigt.

Zu guter letzt möchte ich noch “initialLayout” ansprechen. Dieses Layout wird als Widget angezeigt, bevor das Widget wirklich geladen wurde. Das Widget ist genau dann geladen, wenn unsere Widget Klasse die Funktion “onUpdate” fertig ausgeführt hat und das kann etwas länger dauern. Später dazu mehr.
Es wäre Vorteilhaft, wenn ihr hier ein Layout angebt, welches Beispielsweise einen Text wie “Wird geladen…” oder ähnliches anzeigt.

Design

Wie bereits angesprochen werden wir zwei Layout Dateien benötigen. Dies ist zwar nicht zwangsläufig nötig, aber hilfreich.

beispiel_widget_loading_layout.xml:






 

beispiel_widget_layout.xml:






 

Die beiden Dateien sehen jetzt sehr ähnlich aus -sind sie ja auch- , aber für dieses einfache Beispiel reicht es aus.
Wir zeigen während des Ladens den Text “Wird geladen …” an und anschließend eine Textbox an selbiger Stelle, mit anderem Text.

Bild

Wie bereits angesprochen benötigen wir ein Vorschaubild.
Hier nehmen wir einfach mal ein 400 x 400 Pixel großes Bild:

widget_bild

Android Manifest

Wir haben ja bereits definiert, welche Informationen über unsere Widget an Android weitergegeben werden sollen.
Damit diese Informationen auch wirklich bei Android ankommen und Android überhaupt weiß, dass unsere App ein Widget enthält müssen wir diese Information ebenfalls angeben.
Hierzu öffnen wir die Android-Manifest.xml Datei und fügen innerhalb des “”-Tags ein:


 
 
 
 

Widget Klasse

Zu guter letzt bedarf es der eigentlichen Widget-Klasse.
Diese enthält die eigentliche Logik des Widgets.
Ich werde sie mal ohne weitere Erläuterungen veröffentlichen, die Kommentare innerhalb der Klasse sprechen für sich:

/*
 * Copyright 2016 www.droid-lernen.de
 *
 * Licensed under the Apache License, Version 2.0 (the „License“);
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an „AS IS“ BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package de.droid_lernen.widgeterstellen;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.os.Bundle;
import android.widget.RemoteViews;

public class BeispielWidget 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

Marvin

Ich bin 23 Jahre jung und studiere zurzeit Wirtschaftsinformatik an der Georg-August-Universität in Göttingen. Ich bin ein Mensch, der sich neben der Programmierung noch für tausend andere Dinge interessiert, die mal mehr und mal weniger verrückt sind. Vor allem aber bin ich Feuer und Flamme mit der Programmierung von eigenen kleinen Apps und Programmen, die mein Leben bereichern.

Kommentar hinzufügen

*Pflichtfeld