2016-02-18 14 views
6

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?

Antwort

0

Wie Sie gesagt haben, unterscheidet sich Ihre Ansicht nur durch eine Änderung der Konfiguration. Nehmen wir an, dass Sie Android Studio verwenden, in GUI-Design-Tool gibt es eine Option namens Gehe zum nächsten Bundesland, Mit dieser können Sie Layout-Land-Datei Datei und konfigurieren Sie es wie Sie es wollen, und auch Sie haben nicht ändern IDs als Android entscheiden, welches Layout es verwenden wird, damit Sie auf Ihre TextViews mit derselben ID zugreifen können. Wenn Sie auf eine Ansicht zugreifen möchten, die sich im Include-Tag befindet. Sie könnten einfach die ID verwenden, die Sie ihnen gegeben haben. Ich hoffe, das ist hilfreich. Danke

+0

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

+0

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