工具栏是否被视为视图?

时间:2019-01-06 06:14:11

标签: android toolbar android-framelayout

当我发现one of the Material Design tutorials正在使用带有工具栏 RecyclerView的FrameLayout时,我正在研究one of their Fragments。考虑到documentation for FrameLayout具有:

  

FrameLayout旨在遮挡屏幕上的某个区域以显示   单个项目。通常,应使用FrameLayout 保留一个   子视图 ...

  • 如果本教程仅设计为仅包含一个视图,为什么本教程要在FrameLayout中同时添加工具栏 RecyclerView?
  • 工具栏本身是否不被视为视图?

  • 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>

  • 如果工具栏视图,是否为其隐式赋予权重,使其始终保持在可放大视图的可视堆栈顶部?有人可能认为这对于工具栏的目的是有道理的。

1 个答案:

答案 0 :(得分:0)

FrameLayout可用于添加多个子视图。

  

工具栏本身是否不被视为视图?

所有UI对象,例如工具栏,按钮等在底部扩展View对象,某些对象可以在层次结构中扩展ViewGroup(工具栏),但在底部,甚至ViewGroup扩展View对象。


  

为什么文档本身矛盾?首先,(第一个引号)表示FrameLayout设计为可容纳单个视图,然后(第二个引号)表示可以添加多个子级。我是否误解了“孩子”是什么?

不是,不是说FrameLayout 只能有一个孩子 ,而是说 应该有一个 >
因此,它说FrameLayout可以有多个孩子。
child views是在ViewGroup中添加的那些视图,即,顾名思义,它是一个可以容纳一组其他视图的视图。


  

如果工具栏是视图,是否隐式赋予其权重,使其始终保持在可放大视图的可视堆栈顶部?有人可能会认为这对于工具栏是有道理的。

Ofcourse工具栏是一个视图,或者您可以说一个ViewGroup,
这并不意味着它就位于Viewable堆栈或膨胀视图的顶部。
您始终可以控制要显示工具栏的位置。
之所以将其显示在“顶部”,是因为通常将“标题”和其他选项菜单显示在“视图”顶部。