fill_parent和wrap_content有什么区别?


276

在Android中,布局小部件时,fill_parentmatch_parent在API级别8和更高版本中)和之间有什么区别wrap_content

您是否可以找到任何文档?我很想很好地理解它。


33
请注意,fill_parentmatch_parent在API级别8和更高版本中对进行了重命名。
gfrigon 2012年

Answers:


266

这两个属性都可以应用于View的水平或垂直大小。它用于根据其内容或父布局的大小设置“视图”或“布局”的大小,而不是显式指定尺寸。

fill_parentMATCH_PARENT在API级别8及更高版本中已弃用并重命名)

将小部件的布局设置为fill_parent将迫使其扩展以占用其所放置的布局元素内的可用空间。这大致相当于将Windows Form Control的dockstyle设置为Fill

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

wrap_content

将View的大小设置为wrap_content将迫使其仅扩展到足以容纳其包含的值(或子控件)的程度。对于控件-例如文本框(TextView)或图像(ImageView)-这将包裹所显示的文本或图像。对于布局元素,它将调整布局的大小以适合作为其子级添加的控件/布局。

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

在线文件

此处的Android代码文档中有一些详细信息。


12
如果图像宽度大于屏幕宽度并且我将imageview宽度设置为fill_parent怎么办?图像会被压缩到屏幕尺寸吗?
约翰·沃森

@JohnWatson找到了答案吗?我也很好奇
Rachael

很高兴知道所提到的Windows窗体控件的等效属性。
Rempelos

您看到@JohnWatson有什么?你的故事是什么?答案是什么 ?
HopefulHelpful

36

fill_parent(不建议使用)=match_parent
子视图的边框扩展为与父视图的边框匹配。

wrap_content
子视图的边框紧紧围绕其自身的内容。

这里有一些图像可以使情况更清晰。绿色和红色是TextViews。白色是LinearLayout透明的。

在此处输入图片说明

每个View(a TextView,an ImageView,a Button等)都需要设置视图的widthheight。在xml布局文件中,可能看起来像这样:

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

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

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

但是,通常情况并不理想,因为它对于不同大小的设备不那么灵活。了解wrap_content和之后match_parent,接下来要做的事情是layout_weight

也可以看看

以上图片的XML

垂直LinearLayout

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

水平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>

注意

该答案中的解释假定没有边距或填充。但是即使有,基本概念仍然相同。视图边框/间距仅通过边距或填充的值进行调整。


9
  • fill_parent 将使元素的宽度或高度与父元素(即容器)一样大。

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

单击此处获取ANDROID DOC参考


容器是什么?如何用不同的容器包围视图?
2016年

2

fill_parent

安排了组件的布局,fill_parent将强制性地扩展以填充布局单元成员,并尽可能在空间中。这与Windows控件的dockstyle属性一致。顶部设置的布局或控件fill_parent将强制其占据整个屏幕。

wrap_content

设置视图的大小wrap_content将强制视图扩展以显示所有内容。例如,将TextView和ImageView控件设置为wrap_content将显示其整个内部文本和图像。布局元素将根据内容更改大小。设置一个“自动调整大小”属性大小的视图,该视图wrap_content大致等效于将Windows控件设置为True。

有关详细信息,请查看此链接:http : //developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.