У меня есть вопрос об активности Android. У Activity есть метод addContentView(View)
, в то время как ViewGroup имеет метод (аналогичный?) addView(View)
. К сожалению, его недокументированный "where" находится "Вид из addContentView
". Это похоже на LinearLayout
, просто добавляя "Вид вниз"? Это больше похоже на FrameLayout
, который добавляет свои представления "onTop"? Это зависит от ViewGroup
, установленного на setContentView
?
Если я погружусь в источники, я вижу, что addContentView
вызовет Window
abstract Method addContentView
. К сожалению, я не вижу, какой класс реализует этот метод. Итак, каково поведение Деяний addContentView
точно?
Activity.addContentView(View) == ViewGroup.addContentView(View)?
Ответ 1
Базовая компоновка каждого действия - FrameLayout
. Это означает, что макет, который вы обычно устанавливаете с помощью setContentView()
, является дочерним элементом этого макета. addContentView()
добавляет только еще один ребенок, поэтому он ведет себя как a FrameLayout
(что означает, что он добавляет новые элементы пользовательского интерфейса выше существующих).
Вы можете проверить это, используя инструмент hierachyviewer
из папки ANDROID_SDK\tools
. Вот два скриншота:
Это макет перед вызовом addContentView()
, моя активность состоит из по умолчанию FrameLayout, удерживающего LinearLayout с помощью кнопки (мой макет здесь). Это отражено в нижней строке, а остальные элементы - это заголовок/панель состояния.
После добавления TextView через addContentView()
он выглядит так. Вы можете видеть, что базовый FrameLayout получил новый ребенок.