2012-04-02 25 views
11

Mam pytanie dotyczące aktywności Androida. Aktywność ma metodę addContentView(View), podczas gdy grupa View ma (podobną?) Metodę. Niestety jego nieudokumentowane "gdzie" znajduje się Widok z addContentView. Czy to jest jak LinearLayout po prostu dodanie widoku do dołu? Czy jest bardziej podobny do FrameLayout, który dodaje swoje widoki "onTop"? Czy to zależy od zestawu ViewGroup ustawionego przez setContentView? Jeśli zanurkuję w źródłach, widzę, że addContentView wywoła abstrakcyjną metodę WindowaddContentView. Niestety nie widzę, która klasa implementuje tę metodę. Więc co dokładnie dzieje się z działaniami addContentView?Activity.addContentView (View) == ViewGroup.addContentView (View)?

Odpowiedz

37

Podstawowy układ każdej aktywności to FrameLayout. Oznacza to, że układ, który zwykle ustawiasz pod numerem setContentView(), jest podrzędnym elementem tego układu. addContentView() dodaje tylko inne dziecko, dlatego zachowuje się jak FrameLayout(co oznacza, że ​​dodaje nowe elementy interfejsu użytkownika powyżej istniejących).

Możesz to sprawdzić, używając narzędzia o nazwie hierachyviewer z folderu ANDROID_SDK\tools. Oto dwa screeny:

enter image description here

Jest to układ przed wywołaniem addContentView(), moja działalność polega domyślnego FrameLayout, trzymając LinearLayout z przyciskiem (mój układ tutaj). Znajduje to odzwierciedlenie w dolnym wierszu, pozostałe elementy powyżej to tytuł/pasek stanu.

enter image description here

Po dodaniu TextView poprzez addContentView() wygląda to tak. Widać, że podstawa FrameLayout ma nowe dziecko.

+3

Wow. Naprawdę doceniam twoją odpowiedź, dzięki. Twoja wskazówka i sugerowane narzędzie zaoszczędzą mi wiele godzin! Jesteś typem użytkownika, który sprawia, że ​​Stackoverflow jest taki świetny! –

+0

Świetna odpowiedź! Wsparcie! –

+1

+1 dla "hierachyviewer" – RootCode