[Android] Dynamisches Layout für AppWidget

Anub1s

Lieutenant
Registriert
Aug. 2006
Beiträge
720
Hallo zusammen,

ich versuche, in Android ein AppWidget für den Homescreen zu schreiben. Bisher habe ich für das Layout immer die xml-Datei erzeugt und diese eingebunden:
Code:
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.test_widget); // test_widget.xml enthält statisches Layout
views.setTextViewText(R.id.appwidget_text, "Hallo Welt");
appWidgetManager.updateAppWidget(appWidgetId, views);

Nun würde ich gerne das gesamte Layout des AppWidgets stattdessen dynamisch erzeugen. Beispielhaft möchte ich eine Textdatei auslesen und für jede Zeile einen Button mit der entsprechenden Beschriftung im Widget einblenden.

Mein Problem ist nun, dass ich in einem AppWidget nur dieses RemoteViews-Objekte habe, das eine Methode addView hat, die aber wiederum ein RemoteViews-Objekt als Parameter benötigt.

Was ich gerne machen würde, wäre so etwas in der Art:

Code:
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.test_widget); // test_widget.xml bspw. nur noch ein leeres Layout
Button button1 = new Button(context);
button1.setText("Button1");
views.add(button1); // das funktioniert so leider nicht :(


Wie kann ich Buttons und andere View-Objekte zu meinem Widget hinzufügen?

MfG Anub1s
 
Würde mal versuchen dein test_widget.xml Layout so aufzubauen:
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/view_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </LinearLayout>

</LinearLayout>

Neue Views (zB Buttons) solltest du dann mittels addView in etwa so hinzufügen können:
Code:
...
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.test_widget);
Button button1 = new Button(context);
button1.setText("Button1");

views.addView(R.id.view_container, button1);
 
Zuletzt bearbeitet:
So in der Art hatte ich es auch schon versucht. Die Methode addView bekommt aber als zweiten Parameter keine View (von der Button eine Subklasse wäre) sondern ein RemoteViews-Objekt. Und das kann ich, zumindest soweit ich das verstanden habe, ausschließlich aus einem vordefinierten xml-Layout erzeugen (was mir die Möglichkeit nimmt, dynamisch zu bleiben).
 
Stimmt, auf die RemoteView kann man das so nicht anwenden. Und wie folgt klappt auch nicht?
Code:
...
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.test_widget);
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.view_container);
Button button1 = new Button(context);
button1.setText("Button1");

 
linearLayout .addView(button1);

Habs ehrlich gesagt auch noch nicht testen können. Wollte etwas in der Art aber bald auch mal versuchen. Hab zufällig erst kürzlich in einer knappen Stunde ein einfaches Widget Projekt gebastelt, welches ich als Grundlage verwenden wollte. Wenn ich hier mehr herausfinde (oder umgekehrt du) könnten wir das hier ja austauschen.
 
Zurück
Oben