Apps für Android programmieren leicht gemacht!

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:

<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ 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.
  -->

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="40dp"
    android:minHeight="40dp"
    android:updatePeriodMillis="86400000"
    android:previewImage="@drawable/widget_bild"
    android:initialLayout="@layout/beispiel_widget_loading_layout"
    android:resizeMode="horizontal|vertical"
    android:widgetCategory="home_screen">
</appwidget-provider>

Ü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:

<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ 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.
  -->

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Wird geladen ..."
        android:id="@+id/textView"
        android:layout_gravity="center_horizontal" />
</LinearLayout>

 

beispiel_widget_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ 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.
  -->

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Medium Text"
        android:id="@+id/widget_text"
        android:layout_gravity="center_horizontal" />
</LinearLayout>

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

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