2016-02-18 10 views
6

Mam kilka bardzo podobnych układów dla mojego AppWidget, w rzeczywistości różniących się tylko obrotem jednego z elementów TextView (wybieram odpowiedni układ oparty na orientacji ekranu).Ponowne używanie układów w przypadku AppWidget

Więc zamiast powtarzać te same rzeczy wiele razy (nienawidzę powtarzania) myślałem, że spróbuję uporządkować rzeczy przez Re-using Layouts with <include/>.

Problem pojawia się, gdy próbuję odnieść się do określonych elementów układu według identyfikatora. W przypadku, gdy element znajduje się w załączonym pliku XML układu na non układów -AppWidget Użyłem metody opisane here, w przypadku zastosowania podejścia dwupoziomowy ...

W „macierzystej” układ:

<include layout="@layout/my_layout" android:id="@+id/textview_layout" /> 

w kodzie:

TextView tv = (TextView)findViewById(R.id.textview_layout).findViewById(R.id.textview); 
tv.setText("test"); 

... gdzie identyfikator TextView w "dziecko" układ jest textview. Jest to podejście dwustopniowe, w którym po raz pierwszy odwołujesz się do View zawierającego żądany kod , a następnie odwołujesz się do tego TextView.

Ale dla AppWidgets, zamiast zajmować się bezpośrednio z TextView, musisz zrobić wszystko poprzez RemoteViews.

Więc zamiast:

TextView textView = (TextView)findViewById(viewId); 
textView.setText("text"); 

trzeba by zrobić:

remoteViews.setTextViewText(viewId, "text"); 
appWidgetManager.updateAppWidget(appWidgetId, remoteViews); 

Biorąc pod uwagę, że interfejs do RemoteViews jest w drodze przechodząc w jednym (bezpośredni) Zobacz ID, jak Czy odwołujesz się do elementu w dołączonym pliku?

Odpowiedz

0

Tak jak powiedziałeś, widok różni się tylko zmianą konfiguracji. Biorąc pod uwagę, że korzystasz z Android Studio, w GUI Designing Tool Istnieje opcja o nazwie Przejdź do następnego stanu, Za pomocą tego można wygenerować plik układ-ziemia i skonfigurować go tak, jak chcesz, a także nie zmieniasz ID jako android będzie decydował, który układ będzie używany, abyś mógł uzyskać dostęp do swoich TextView z tym samym identyfikatorem. Jeśli chcesz uzyskać dostęp do dowolnego widoku, który znajduje się w znaczniku include. możesz po prostu użyć identyfikatora, który im dałeś. Mam nadzieję, że to będzie pomocne. Dziękuję

+0

Dzięki. Zakładam, że jest tak, że odpowiedni układ może być automatycznie wybrany przez system operacyjny na podstawie orientacji ekranu? Niestety w moim przypadku nie jest to tak proste, ponieważ nawet jeśli ekran jest np. naprawione w orientacji pionowej, muszę przełączać się między różnymi układami na podstawie wymiarów widgetu (jeśli widget jest wysoki i wąski, układ byłby obracany ... jako opcja użytkownika). – drmrbrewer

+0

jeśli jest tak, że możesz ustawić programowo to jest łatwe, sprawdź samouczek. możesz także użyć fragmentów, które są lepsze dla twojej sutacji. Dziękuję Ci – Jois

Powiązane problemy