fill_parent和wrap_content之间的区别是什么?

在Android中,当布局小部件时,fill_parent (API级别8及以上的match_parent)和wrap_content之间的区别是什么?

你有什么文件可以参考吗?我有兴趣很好地理解它。

296620 次浏览

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

fill_parent(在API级别8及以上已弃用并重命名为MATCH_PARENT)

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

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

wrap_content

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

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

在线文档

在Android代码文档在这里中有一些细节。

  • fill_parent将使元素的宽度或高度为 与父元素一样大,换句话说,容器。

  • wrap_content将使宽度或高度与所需的一样大 包含其中的元素。

点击这里for ANDROID DOC Reference

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

fill_parent(已弃用)= match_parent
子视图的边界扩展到匹配父视图的边界 < p > wrap_content < br > 子视图的边框紧紧地包裹着它自己的内容

这里有一些图片让你看得更清楚。绿色和红色是TextViews。白色是一个LinearLayout显示通过。

enter image description here

每个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

垂直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>

请注意

这个答案中的解释假设没有边距或填充。但即使有,基本概念仍然是一样的。视图边框/间距只是通过边距或填充的值进行调整。