1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Android 2.2 Widget Layout

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Hin, 17.04.2012.

  1. Hin, 17.04.2012 #1
    Hin

    Hin Threadstarter Android-Experte

    Beiträge:
    888
    Erhaltene Danke:
    108
    Registriert seit:
    14.03.2011
    Hallo zusammen,

    ich möchte ein kleine Widget schreiben, das im wesentlichen das Layout wie im Bild im Anhang hat.

    Wie man sieht wiederholt sich das selbe Layout in einer Art Liste. In einer Activity würde ich dafür eine ListView verwenden. Dies ist aber in einem Widget bei Android 2.2 und 2.3 noch nicht möglich.

    Gibt es gar keine andere Alternative als x-mal hintereinander das gleiche layout in der xml zu kopieren und einzufügen?
     

    Anhänge:

  2. Tom299, 17.04.2012 #2
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Du kannst das Layout auch dynamisch erzeugen, dann brauchst du es nur 1 mal als xml zu Erstellen und dann wiederverwenden oder ganz ohne xml alles dynamisch ...
     
  3. Hin, 17.04.2012 #3
    Hin

    Hin Threadstarter Android-Experte

    Beiträge:
    888
    Erhaltene Danke:
    108
    Registriert seit:
    14.03.2011
    Wie erzeuge ich ein Objekt des XML Layouts in einem Widget? findViewById(int id) ist ja zum Beispiel nur innerhalb einer Activity möglich, ich habe ja aber nur ein Widget (habe AppWidgetProvider erweitert).
     
  4. Tom299, 17.04.2012 #4
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Ich hab noch kein Widget programmiert, aber schau mal hier -> Android Homescreen Widgets- Tutorial da gibts Erklärungen und Beispielcode, damit kommst du bestimmt weiter.

    Z.B. seh ich da sowas:
    Code:
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
    					R.layout.widget_layout);
    
    Das müßte ja das findViewByID dann "ersetzen" ...
     
  5. Hin, 17.04.2012 #5
    Hin

    Hin Threadstarter Android-Experte

    Beiträge:
    888
    Erhaltene Danke:
    108
    Registriert seit:
    14.03.2011
    Ok, dann kannst du mir wohl auch nicht weiterhelfen, trotzdem danke für deine Mühe.

    Ich erstelle ja genau diese RemoteViews. Meine Frage ist nun, ob ich dem Layout der RemoteViews im Code noch weitere Elemente hinzufügen kann (unter Android >= 2.2; ab 3.0 ist dies ja kein Problem mehr, aber ich will alles ab 2.2 unterstützen). Ich habe jetzt einfach alle Elemente, die ich benötige direkt in die XML geschrieben. Das ist nicht schön, aber es funktioniert.

    Falls jemand hier Erfahrung in der Widget-Programmierung hat und es irgendeine dynamische Lösung gibt, würde ich mich über eine Antwort freuen. :)
     
  6. Hin, 18.04.2012 #6
    Hin

    Hin Threadstarter Android-Experte

    Beiträge:
    888
    Erhaltene Danke:
    108
    Registriert seit:
    14.03.2011
    So, habe es nun geschafft. Falls sich sonst noch wer damit beschäftigen sollte, hier meine Lösung.

    Im Code:
    PHP:
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main_layout);
    RemoteViews newView;
    for (
    int i 0NUMBER_OF_EVENTSi++) {
        
    newView = new RemoteViews(context.getPackageName(), R.layout.widgetrow);
        
    newView.setTextViewText(R.id.title"titel nummer " i);
        
    remoteViews.addView(R.id.main_layout_linearlayoutnewView);
    }
    main_layout.xml:
    PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/main_layout_linearlayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        
        <!-- hier wird über den code mehrfach das widgetrow.xml layout eingefügt -->
        
    </LinearLayout>
    widgetrow.xml:
    PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="3dp" >

        <TextView android:id="@+id/title" android:textSize="15dp" android:layout_width="wrap_content" android:layout_height="wrap_content" />

    </LinearLayout>
    Ich habe ziemlich viel gekürzt um es übersichtlich zu halten. Kann gut sein, dass das so nicht lauffähig ist, aber ich denke es gibt einen guten Einblick in die Funktionsweise.
     
    keinbrain bedankt sich.

Diese Seite empfehlen