【问题标题】:LinearLayout vs RelativeLayout [closed]线性布局与相对布局 [关闭]
【发布时间】:2012-07-06 13:41:54
【问题描述】:
RelativeLayout 在 android 中相对于LinearLayout 有什么优势?对于一个特定的设计,您更喜欢哪一个,其背后的原因是什么??
它(RelativeLayout)是否与 HTML <div> 类似或相似??
【问题讨论】:
标签:
android
android-layout
android-linearlayout
android-relativelayout
【解决方案1】:
阅读this article:
Android UI 工具包提供了几个相当容易使用的布局管理器,并且大多数时候,您只需要这些布局管理器的基本功能来实现用户界面。不幸的是,坚持基本功能并不是创建用户界面的最有效方式。一个常见的例子是滥用LinearLayout,这导致视图层次结构中的视图激增。添加到应用程序中的每个视图,或者更糟糕的是每个布局管理器都是有代价的:初始化、布局和绘图变得更慢。当您嵌套多个使用 weight 参数的 LinearLayout 时,布局传递可能会特别昂贵,这需要对子元素进行两次测量...
在 RelativeLayout 中,视图与其父视图、RelativeLayout 本身或其他视图对齐。例如,我们声明描述与 RelativeLayout 的底部对齐,并且标题位于描述上方并锚定到父级的顶部。在描述 GONE 的情况下,RelativeLayout 不知道将标题的底部边缘放置在哪里。为了解决这个问题,你可以使用一个非常特殊的布局参数alignWithParentIfMissing。
这个布尔参数只是告诉RelativeLayout在缺少约束目标时使用它自己的边缘作为锚点。例如,如果您将视图放置在 GONE 视图的右侧并将 alignWithParentIfMissing 设置为 true,则 RelativeLayout 会将视图锚定到其左边缘。在我们的例子中,使用 alignWithParentIfMissing 将导致 RelativeLayout 将标题的底部与它自己的底部对齐。
...例如,当您为 ListView 中的每个项目使用这种布局时,差异将更加重要...
【解决方案2】:
通过名称您可以知道LinearLayout 根据您设置的方向线性添加垂直或水平视图。它将一个接一个地添加视图,这取决于设计的要求。并且RelativeLayout添加了相互关联的视图,RelativeLayout中不需要声明方向。
例如,您想在另一个下添加两个TextView,因此您将添加第一个TextView,并通过在XML 文件中添加android:layout_below="first textview's id" 来引用第二个TextView 和第一个TextView。这样你就可以处理RelativeLayout了。