【问题标题】:What's the difference between fill_parent and wrap_content?fill_parent 和 wrap_content 有什么区别?
【发布时间】:2010-09-30 18:31:39
【问题描述】:

在 Android 中,布局小部件时,fill_parent(API 级别 8 及更高级别为match_parent)和wrap_content 有什么区别?

是否有任何文档可供您参考?我有兴趣很好地理解它。

【问题讨论】:

  • 请注意,fill_parent 在 API 级别 8 及更高版本中已重命名为 match_parent

标签: android layout user-interface


【解决方案1】:

fill_parent(已弃用)= match_parent
子视图的边框扩展以匹配父视图的边框。

wrap_content
子视图的边框紧紧地包裹在它自己的内容周围。

这里有一些图片可以让事情更清楚。绿色和红色是TextViews。白色是LinearLayout 透出。

每个View(一个TextView、一个ImageView、一个Button等)都需要设置视图的widthheight。在 xml 布局文件中,可能如下所示:

android:layout_width="wrap_content"
android:layout_height="match_parent"

除了将宽度和高度设置为match_parentwrap_content,您还可以将它们设置为某个绝对值:

android:layout_width="100dp"
android:layout_height="200dp"

不过,这通常不是那么好,因为它对于不同尺寸的设备没有那么灵活。了解了wrap_contentmatch_parent之后,接下来要学习的是layout_weight

另见

以上图片的 XML

垂直线性布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="width=wrap height=wrap"
        android:background="#c5e1b0"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="width=match height=wrap"
        android:background="#f6c0c0"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="width=match height=match"
        android:background="#c5e1b0"/>

</LinearLayout>

水平线性布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="WrapWrap"
        android:background="#c5e1b0"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="WrapMatch"
        android:background="#f6c0c0"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="MatchMatch"
        android:background="#c5e1b0"/>

</LinearLayout>

注意

此答案中的解释假设没有margin or padding。但即使有,基本概念还是一样的。视图边框/间距仅通过边距或内边距的值进行调整。

【讨论】:

    【解决方案2】:
    • fill_parent 将使元素的宽度或高度为 大为父元素,也就是容器。

    • wrap_content 将使宽度或高度尽可能大 包含其中的元素。

    Click here for ANDROID DOC Reference

    【讨论】:

    • 容器是什么?如何用不同的容器包围视图?
    【解决方案3】:

    fill_parent

    一个组件被安排布局为fill_parent 将强制展开以填充布局单元成员,尽可能多的空间。这与 Windows 控件的 dockstyle 属性一致。 fill_parent 的顶部设置布局或控件将强制它占据整个屏幕。

    wrap_content

    设置大小为wrap_content的视图将强制视图被展开以显示所有内容。 TextView 和 ImageView 控件,例如,设置为wrap_content 将显示其整个内部文本和图像。布局元素会根据内容改变大小。设置一个视图大小的Autosize属性wrap_content大致相当于设置一个Windows控件为True。

    详情请查看此链接:http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

    【讨论】:

      【解决方案4】:

      任何一个属性都可以应用于 View 的(视觉控制)水平或垂直尺寸。它用于根据内容或其父布局的大小设置 View 或 Layouts 的大小,而不是显式指定维度。

      fill_parent(在 API 8 级及更高版本中已弃用并重命名为 MATCH_PARENT

      将小部件的布局设置为 fill_parent 将强制它展开以占用其所在布局元素内的可用空间。这大致相当于将 Windows 窗体控件的停靠样式设置为 Fill .

      将顶级布局或控件设置为 fill_parent 将强制它占据整个屏幕。

      wrap_content

      将 View 的大小设置为 wrap_content 会强制它展开到足以包含它所包含的值(或子控件)的程度。对于控件——如文本框 (TextView) 或图像 (ImageView)——这将包装正在显示的文本或图像。对于布局元素,它将调整布局大小以适应作为其子元素添加的控件/布局。

      这大致相当于将 Windows 窗体控件的 Autosize 属性设置为 True。

      在线文档

      Android 代码文档here 中有一些详细信息。

      【讨论】:

      • 如果图像宽度大于屏幕宽度并且我将 imageview 宽度设置为 fill_parent。图像会被压缩到屏幕大小吗?
      • @JohnWatson 你找到答案了吗?我也很好奇。
      • 很高兴知道所提到的 Windows 窗体控件的等效属性。
      • 你看到了什么@JohnWatson?你的故事是什么?答案是什么?
      猜你喜欢
      • 2011-08-11
      • 2013-04-04
      • 2013-04-02
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 2011-12-12
      相关资源
      最近更新 更多