2011-02-03

Aus eins mach zwei - Widgets gekonnt geklont

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. Für TKWeek sieht das zum Beispiel so aus:
Widget-Auswahlbox
Widget-Auswahlbox
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>
Java2html
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…