Activity.addContentView (View) == ViewGroup.addContentView (View)? - PullRequest
12 голосов
/ 02 апреля 2012

У меня есть вопрос, касающийся активности Android:

У действия есть метод addContentView(View), в то время как у ViewGroup есть (похожий?) addView(View) метод.

К сожалению, это недокументированное место, где находится вид из addContentView.Это похоже на LinearLayout, просто добавляющее View внизу, или это больше похоже на FrameLayout, который добавляет свои Views "onTop"?Зависит ли это от ViewGroup, установленного setContentView?

Если я углублюсь в источники, я вижу, что addContentView вызовет Window абстрактный метод addContentView.К сожалению, я не вижу, какой класс реализует этот метод.Так что же такое поведение Деятельностей addContentView?

1 Ответ

39 голосов
/ 02 апреля 2012

Базовая схема каждого действия - FrameLayout.Это означает, что макет, который вы обычно устанавливаете с помощью setContentView(), является потомком этого макета.addContentView() добавляет просто еще один дочерний элемент, поэтому он ведет себя как FrameLayout (что означает, что он добавляет новые элементы интерфейса поверх существующих) .

Вы можете проверить это с помощью инструмента hierachyviewer из вашей папки ANDROID_SDK\tools.Вот два снимка экрана:

enter image description here

Это макет перед вызовом addContentView(), моя деятельность состоит из FrameLayout по умолчанию, содержащего LinearLayout с кнопкой (мой макет)Вот).Это отражено в нижнем ряду здесь, другие элементы выше - это заголовок / строка состояния.

enter image description here

После добавления TextView через addContentView() выглядиткак это.Вы можете видеть, что у базового FrameLayout появился новый ребенок.

...