当我发现one of the Material Design tutorials正在使用带有工具栏和 RecyclerView的FrameLayout时,我正在研究one of their Fragments。考虑到documentation for FrameLayout具有:
FrameLayout旨在遮挡屏幕上的某个区域以显示 单个项目。通常,应使用FrameLayout 保留一个 子视图 ...
工具栏本身是否不被视为视图?
RecyclerView是唯一在名称中明确带有 view 的对象,但是如果工具栏对象也没有视图,那是什么?
FrameLayout文档还具有:
您可以将多个子项添加到FrameLayout 并进行控制 通过将重力分配给每个,它们在FrameLayout中的位置 子,使用android:layout_gravity属性。子视图已绘制 ,并且最近添加的子项位于顶部。
文档为什么自相矛盾?首先,(第一个引号)表示FrameLayout设计为可容纳单个视图,然后(第二个引号)表示可以添加多个子级。我是不是误解了“ 孩子”是什么?
工具栏和RecyclerView是否有效地堆叠在一起了?
我注意到RecyclerView的父布局(NestedScrollView)使用了android:layout_marginTop="56dp"
,大概是将其开始位置移到了工具栏的末尾(实际上,如果此边距设置为0dp,则工具栏会遮盖某些RecyclerView )。因此,考虑到FrameLayout子级的“堆叠”性质,如果我从RecyclerView中删除了marginTop属性(因为在RecyclerView之后添加了),则我期望RecyclerView在工具栏的顶部 xml设计中的工具栏)。但是,这没有用;可以这么说,工具栏似乎一直保持在“堆栈顶部”的突出位置。
此示例中的FrameLayout是否更多地用作了通用容器,子视图在该容器中自我管理了它们在可见区域中的位置(考虑了NestedScrollView中android:layout_marginTop="56dp"
的硬编码用法)?< / p>
如果工具栏是视图,是否为其隐式赋予权重,使其始终保持在可放大视图的可视堆栈顶部?有人可能认为这对于工具栏的目的是有道理的。
答案 0 :(得分:0)
FrameLayout可用于添加多个子视图。
工具栏本身是否不被视为视图?
所有UI对象,例如工具栏,按钮等在底部扩展View
对象,某些对象可以在层次结构中扩展ViewGroup
(工具栏),但在底部,甚至ViewGroup扩展View
对象。
为什么文档本身矛盾?首先,(第一个引号)表示FrameLayout设计为可容纳单个视图,然后(第二个引号)表示可以添加多个子级。我是否误解了“孩子”是什么?
不是,不是说FrameLayout 只能有一个孩子 ,而是说 应该有一个 > ,
因此,它说FrameLayout可以有多个孩子。
还child views
是在ViewGroup
中添加的那些视图,即,顾名思义,它是一个可以容纳一组其他视图的视图。
如果工具栏是视图,是否隐式赋予其权重,使其始终保持在可放大视图的可视堆栈顶部?有人可能会认为这对于工具栏是有道理的。
Ofcourse工具栏是一个视图,或者您可以说一个ViewGroup,
这并不意味着它就位于Viewable堆栈或膨胀视图的顶部。
您始终可以控制要显示工具栏的位置。
之所以将其显示在“顶部”,是因为通常将“标题”和其他选项菜单显示在“视图”顶部。