Панели инструментов считаются представлениями? - PullRequest
0 голосов
/ 06 января 2019

Я работал над одним из учебных пособий Material Design , когда заметил, что один из их фрагментов использует FrameLayout с панелью инструментов и с RecyclerView. Это кажется странным, учитывая, что документация для FrameLayout имеет:

FrameLayout предназначен для блокировки области на экране до отображения один предмет . Как правило, FrameLayout должен использоваться для хранения одного детский взгляд ...

  • Зачем в учебнике добавляются панель инструментов и RecyclerView в FrameLayout, если он предназначен для размещения только одного представления?
  • Сами панели инструментов не считаются видами?

  • RecyclerView - единственный объект здесь явно с представлением в имени, но что такое объект панели инструментов, если не также представление?

Документация FrameLayout также имеет:

Вы можете, однако, добавить несколько дочерних элементов в FrameLayout и контролировать их положение в пределах FrameLayout, назначая гравитацию каждому ребенок, используя атрибут android: layout_gravity. Дочерние виды нарисованы в стеке , с последним добавленным потомком сверху.

  • Почему документация противоречит самой себе? Сначала (первая цитата) говорится, что FrameLayout предназначен для хранения одного представления, затем позже (вторая цитата) говорится, что можно добавить несколько дочерних элементов. Я неправильно понимаю, что такое « ребенок »?

  • Эффективно ли панель инструментов и RecyclerView накладываются друг на друга?

Я заметил, что родительский макет RecyclerView (NestedScrollView) использовал android:layout_marginTop="56dp", предположительно, чтобы переместить его начало ниже конца панели инструментов (действительно, если это поле было установлено на 0dp, то панель инструментов затеняла бы некоторые из RecyclerView). Таким образом, учитывая «стековый» характер дочерних элементов FrameLayout, я ожидал, что RecyclerView будет поверх панели инструментов, если я удалил этот атрибут marginTop из RecyclerView (поскольку RecyclerView добавляется после Панель инструментов в дизайне xml). Это не сработало, однако; Панель инструментов, казалось, сохраняла свое видное положение на «вершине стека», так сказать.

  • Используется ли FrameLayout в этом примере больше как универсальный контейнер, где дочерние представления самостоятельно управляют своими позициями в видимой области (учитывая жестко закодированное использование android:layout_marginTop="56dp" в NestedScrollView)?

  • Если панель инструментов является представлением, неявно ли ей присваивается такой вес, чтобы он всегда оставался на вершине просматриваемого стека завышенных представлений? Можно утверждать, что это имеет смысл для целей панели инструментов.

1 Ответ

0 голосов
/ 06 января 2019

FrameLayout может использоваться для добавления более одного дочернего представления.

Сами панели инструментов не считаются представлениями?

Все объекты пользовательского интерфейса, например Панели инструментов, кнопки и т. Д. Расширяют объект View внизу, где некоторые могут расширять ViewGroup (панель инструментов) в иерархии, но на самом деле даже ViewGroup расширяет View объект.

1012 *
*

Почему документация противоречит самой себе? Сначала (первая цитата) говорится, что FrameLayout предназначен для хранения одного представления, затем позже (вторая цитата) говорится, что можно добавить несколько дочерних элементов. Я неправильно понимаю, что такое «ребенок»?

Нет, не сказано, что FrameLayout может иметь только одного ребенка , он говорит, что должен иметь ,
Поэтому сказано, что FrameLayout может иметь несколько дочерних элементов.
Также child views - это те представления, которые добавляются в ViewGroup, то есть, как следует из названия, это представление, которое может содержать группу других представлений.


Если панель инструментов является представлением, неявно ли ей присваивается такой вес, чтобы он всегда оставался на вершине просматриваемого стека завышенных представлений? Можно утверждать, что это имеет смысл для целей панели инструментов.

Ofcourse Toolbar - это View, или вы можете сказать ViewGroup,
Это не означает, что он остается на вершине стека Viewable или завышенных представлений ..
Вы всегда можете контролировать, где вы хотите показать панель инструментов ..
Причина, по которой он отображается вверху, заключается в том, что общепринятым является показ меню заголовка и других параметров в верхней части представления.

...