Widgets geben in ihren Konfigurationsdateien an, wie viel Platz auf dem Home Screen sie gerne einnehmen möchten. Da diese Datei in das apk gepackt wird, ist es nicht ohne weiteres möglich, die Größe zur Laufzeit (zum Beispiel in einem Konfigurationsdialog) zu ändern. Man behilft sich damit, einfach mehrere Widgets anzubieten.

Widgets werden durch das XML-Element <receiver /> in der Manifestdatei registriert. Die Datei weekinfowidget_info.xml enthält unter anderem die eben angesprochenen Größeninformationen.

<receiver android:name=".WeekInfoWidget" android:label="@string/weekinfowidget_name">
   <intent-filter>
     <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
   </intent-filter>
   <meta-data android:name="android.appwidget.provider"
    android:resource="@xml/weekinfowidget_info" />
 </receiver>

Um nun ein zusätzliches Widget zu installieren, müsste es doch eigentlich ausreichen, einen weiteren Eintrag nach obigen Muster hinzuzufügen und nur den Widget-Namen und die eben genannte Datei auszutauschen. Oder? Offenbar nein. Meinen Experimenten nach erscheint der zweite Eintrag nur, wenn für android:name ein anderer Wert eingetragen wird. Konkret heißt das, man muss die Widget-Klasse duplizieren. Zum Glück reicht es hierzu aus, eine neue Klasse einzuführen, die von der Widget-Klasse ableitet. Sie muss nichts implementieren, die bloße Ableitung reicht.

Haben Sie ähnliche Erfahrungen mit Widgets gemacht und eine andere Lösung gefunden? Schreiben Sie mir…


This is a (slightly updated) repost of a piece I published on my blog Tommi’s Blog. I deleted the blog in the wake of the GDPR, so the original version is no longer available, or only through the WayBack Machine of the Internet Archive. Please note: code usually has not been updated, so language feature reflect the time the original post was written.