解释:为什么为 Fragment 使用 FrameLayout
什么是FrameLayout
:
根据关于 Commons Layouts 的 Google 文档和关于LinearLayout、RelativeLayout 和 AbsoluteLayout 之间有什么区别的答案?, ViewGroup
s as LinearLayout
, RelativeLayout
, AbsoluteLayout
(decrepated) ,TableLayout
等允许显示视图:
- LinearLayout: "一一显示视图"
- 相对布局:“显示关于另一个视图的视图”
- TableLayout:“在表格中显示视图”
等。
FrameLayout
通过重叠显示视图。它通常用于包含布局:
“框架布局是 Android 开发人员用来组织视图控件的最简单和最有效的布局类型之一。与其他一些布局相比,它们的使用频率较低,仅仅是因为它们通常仅用于显示一个视图或重叠的视图。框架布局通常用作容器布局,因为它通常只有一个子视图(通常是另一种布局,用于组织多个视图)。”
来源:FrameLayout MobilTuts
“框架布局允许开发人员在框架布局中仅显示单个或多个 UI 元素,但每个元素将根据屏幕左上角定位,重叠的元素将重叠显示。”
来源:绝对初学者的Android框架布局
好的,但是,我为什么需要这个Fragment
?(相对于 LinearLayout 或 <fragment>)
FrameLayout的谷歌文档说:
“FrameLayout 旨在阻止屏幕上的一个区域以显示单个项目。”
FrameLayout
将主持一个布局,它愿意这样做。而其余的ViewGroup
s 只是显示视图。您可以Fragment
在所有ViewGroup
s中创建一个(我对此进行了测试,这对我来说是一个惊喜),但这不是正确的方法。它们是FrameLayout
:
“......当您想要重叠视图时选择的正常布局。”
如果您使用 a 创建布局<fragment .../>
,您的片段将不会被另一个片段替换,因为它已显示,它与视图上的 id 一起“附加”。要替换片段,您需要托管它:“通过将片段封装在 FrameLayout 中,您可以仅替换细节”(请参阅此答案)。
然后,请记住FrameLayout
s 是空的并且可以承载布局。Fragment
s(来自 Google 的片段文档,它非常简单地解释了如何使用片段的事实),当它们在 xml 中声明时,它们必须附加一个无法替换的类(一个 id)。
这就是为什么我们需要一个容器来承载这个片段并重叠活动的视图!
希望这会有所帮助。
注意:如果有人想编辑这个答案,因为它没有解释或解释不好,她/他可以衷心地。