Ich habe mehrere sehr ähnliche Layouts für meine , tatsächlich unterscheidet sich nur in der Drehung eines der TextView
Elemente (ich wähle das entsprechende Layout auf der Bildschirmausrichtung).Wiederverwenden von Layouts im Fall eines AppWidget
Also anstatt das gleiche Zeug mehrmals wiederholen (ich hasse Wiederholung) Ich dachte, ich würde versuchen, Dinge aufzuräumen von Re-using Layouts with <include/>
.
Das Problem kommt, wenn ich versuche, bestimmte Elemente des Layouts nach ID zu verweisen. Wo das Element in dem mitgelieferten Layout xml ist, für nicht -AppWidget Layouts habe ich ein Verfahren beschrieben, here verwendet, wobei ein Zwei-Klassen-Ansatz verwendet wird ...
Im „Eltern“ Layout:
<include layout="@layout/my_layout" android:id="@+id/textview_layout" />
im Code:
TextView tv = (TextView)findViewById(R.id.textview_layout).findViewById(R.id.textview);
tv.setText("test");
... wo die ID der TextView
in dem "Kind" Layout textview
ist. Es ist also ein zweistufiger Ansatz, bei dem Sie zuerst auf die View
verweisen, die die TextView
enthält, die Sie möchten, und dann referenzieren Sie die TextView
davon.
Aber für AppWidgets, anstatt sich direkt mit der TextView
befassen, müssen Sie alles durch eine RemoteViews
tun.
Also statt:
TextView textView = (TextView)findViewById(viewId);
textView.setText("text");
würden Sie tun müssen:
remoteViews.setTextViewText(viewId, "text");
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
Da die Schnittstelle in die RemoteViews
durch in einer einzigen (direkt) Ansicht ID zugeben, wie Würden Sie auf ein Element in einer enthaltenen Datei verweisen?
Danke. Ich nehme an, dass dies so ist, dass das passende Layout automatisch vom Betriebssystem ausgewählt werden kann, basierend auf der Bildschirmausrichtung? Leider ist es in meinem Fall nicht so einfach, denn selbst wenn der Bildschirm z. im Hochformat korrigiert, muss ich zwischen verschiedenen Layouts wechseln, basierend auf den Abmessungen des Widgets (wenn das Widget groß und schmal ist, würde das Layout gedreht werden ... als eine Benutzeroption). – drmrbrewer
Wenn das der Fall ist, können Sie es programmatisch einstellen, es ist einfach, schauen Sie sich ein Tutorial an. und Sie können auch Fragmente verwenden, die für Ihre Anwendung besser sind, denke ich. Danke – Jois