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

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


当前回答

Fill_parent(已弃用)= match_parent 子视图的边界将展开以匹配父视图的边界。

wrap_content 子视图的边框紧紧地围绕着它自己的内容。

这里有一些图片让你看得更清楚。绿色和红色的是textview。白色是线性布局显示通过。

每个视图(TextView, ImageView, Button等)都需要设置视图的宽度和高度。在xml布局文件中,它看起来像这样:

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

除了将width和height设置为match_parent或wrap_content之外,你还可以将它们设置为一些绝对值:

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

不过,通常情况下,这并不是很好,因为它对于不同大小的设备来说不那么灵活。在理解了wrap_content和match_parent之后,接下来要学习的是layout_weight。

另请参阅

android:layout_weight是什么意思? 视图的Padding和Margin的区别 重力vs布局重力

以上图像的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>

Note

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

其他回答

任何一个属性都可以应用于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将使宽度或高度与所需的一样大 包含其中的元素。

点击这里获取ANDROID DOC参考

宽和:

一个组件被布局安排为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 子视图的边界将展开以匹配父视图的边界。

wrap_content 子视图的边框紧紧地围绕着它自己的内容。

这里有一些图片让你看得更清楚。绿色和红色的是textview。白色是线性布局显示通过。

每个视图(TextView, ImageView, Button等)都需要设置视图的宽度和高度。在xml布局文件中,它看起来像这样:

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

除了将width和height设置为match_parent或wrap_content之外,你还可以将它们设置为一些绝对值:

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

不过,通常情况下,这并不是很好,因为它对于不同大小的设备来说不那么灵活。在理解了wrap_content和match_parent之后,接下来要学习的是layout_weight。

另请参阅

android:layout_weight是什么意思? 视图的Padding和Margin的区别 重力vs布局重力

以上图像的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>

Note

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