Подтвердить что ты не робот

Activity.addContentView(View) == ViewGroup.addContentView(View)?

У меня есть вопрос об активности Android. У Activity есть метод addContentView(View), в то время как ViewGroup имеет метод (аналогичный?) addView(View). К сожалению, его недокументированный "where" находится "Вид из addContentView". Это похоже на LinearLayout, просто добавляя "Вид вниз"? Это больше похоже на FrameLayout, который добавляет свои представления "onTop"? Это зависит от ViewGroup, установленного на setContentView? Если я погружусь в источники, я вижу, что addContentView вызовет Window abstract Method addContentView. К сожалению, я не вижу, какой класс реализует этот метод. Итак, каково поведение Деяний addContentView точно?

4b9b3361

Ответ 1

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

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

enter image description here

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

enter image description here

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