match_parent和fill_parent有什么区别?


Answers:


1235

它们是同一件事(在API Level 8+中)。使用match_parent

FILL_PARENT(在API级别8和更高版本中重命名为MATCH_PARENT),这意味着该视图希望与其父视图一样大(减去填充)

...

fill_parent:视图应与其父视图一样大(减去填充)。从API级别8开始不推荐使用此常数,并用代替match_parent

http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html


5
如果我同时为1.6和2.2编写应用程序,则我将使用fill_parent来实现兼容性,对吗?
emeraldhieu 2011年

12
必须有一些区别吧?否则,为什么Google弃用它并重命名新的呢?
stickedoverflow 2012年

49
@Halim不,没有区别:两者都定义为constant -1。我对此感觉更好,我也没有得到任何改进... :-)
arpy

2
@jlovison不,没有区别。两者都是-1。您会收到此错误,因为旧平台不知道相同常量的新名称。
Tapirboy

16
真奇怪,Android Studio仍然在所有默认模板创建的布局中放置“ fill_parent”!我知道他们是一样的,但是我每年都会反复提到这个SO问题,以确保没有人发现确实存在差异。Google / Android小组能否将默认值从“ fill_parent”更改为“ match_parent”?提前致谢!:)
swooby

246

Google更改了名称以避免混淆。

旧名称的问题fill parent在于,它暗示了它会影响父级的尺寸,同时match parent更好地描述了所产生的行为-将尺寸与父级匹配。

两个常量-1最终都解析为,因此导致应用程序中的行为相同。具有讽刺意味的是,为了澄清事物而进行的此名称更改似乎增加了混乱,而不是消除了混乱。


17
...除了RelativeLayout的child的width = match_parent,还有另一个leftOf。它与父级的尺寸不匹配,填充了剩余的尺寸。这只会引起混乱。

7
由于FILL_PARENT和MATCH_PARENT表示视图要与父视图一样大,因此减去父视图的填充不是内部空间而是外部尺寸?现在我更加困惑了!
Caltor 2013年

@bnieland我已经删除了对内部和外部尺寸的引用,因为它们与developer.android.com/reference/android/view/上的google文档不一致。尽管我在sevennet.org上看到了类似(未经证实的)报价/ 2014/11/22 /…这可能是您获取信息的地方。
卡托2015年

28

从功能上来说没有什么区别,Google刚刚将名称从API级别8(Android 2.2)从fill_parent更改为match_parent。由于兼容性原因,FILL_PARENT仍然可用。

LayoutParams.FILL_PARENT并且LayoutParams.MATCH_PARENT都具有值-1。不知道是什么吸引了谷歌从填充父母更改为匹配父母:)

由于大多数phones are >= Android 2.2..您应该使用Match Parent以获得将来的兼容性...不确定何时将终止旧的Fill Parent常数!


11

为了兼容起见,最好坚持使用fill_parent,即在支持以下API 8设备时。但是,如果您的应用程序面向API 8及更高版本,则应改用match_parent。


8
但是仅向后兼容。如果FILL_PARENT已弃用(如上面的Matt Ball所述),则向前兼容的唯一选项是MATCH_PARENT

2
同意,但是如果您打算为较低的API级别的设备编写代码,例如:2.3、2.2、2.1,则需要使用FILL_PARENT。使用旧版本的match_parent时遇到一些问题。
MSA

现在该删除该答案了。它不再重要,并且可以给新开发人员错误的建议
Tim

8

FILL_PARENT已在API级别8中弃用,并MATCH_PARENT使用了更高级别的API


8

使用match_parent 代替fill_parent并将其设置为尽可能远的父级。只需使用match_parent,不必担心fill_parent。我完全放弃了fill_parent,一切都像往常一样完美。

点击这里了解更多。


6

只是给它一个更接近实际动作的名称"fill_parent"不会像名称所暗示的那样填充剩余空间(为此您使用weight属性)。取而代之的是,它占用其布局父级的空间。这就是为什么新名称是"match_parent"


2
我不明白人们所说的逻辑。父母有填充物。或孩子离开了另一个。孩子匹配吗?否,它会填满剩余空间吗?在显然是“ Bizzarro世界”中,我们回答:是的。
kaay 2015年

1
@kaay我完全同意新名称比旧名称更糟。但是谷歌所说的话。
卡托

6

两者具有相似的功能,唯一的区别是,fill_parent一直使用到API级别8,而match_parent在API级别8或更高级别之后使用。


6

当您设置layout widthheight as match_parentin XML属性时,它将占据父视图具有的整个区域,即它将与父视图一样大。

<LinearLayout
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:background="#f9b0b0">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#b0f9dc"/>

</LinearLayout>

野兔父母是红色的,孩子是绿色的。儿童占据所有区域。因为是widthheightmatch_parent

在此处输入图片说明

注:如果将parent应用于填充,则不会包含该空间。

<LinearLayout
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:background="#f9b0b0"
    android:paddingTop="20dp"
    android:paddingBottom="10dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#b0f9dc"/>

</LinearLayout>

在此处输入图片说明

所以TextView hight = 300dp(父级hight)-(20(paddingTop)+10(paddingBottom))=(300-30)dp = 270 dp

fill_parent与match_parent

fill_parent 是的以前的名字 match_parent

对于API级别8和更高版本,现在已fill_parent重命名为match_parentfill_parent

所以fill_parentmatch_parent都一样。

fill_parent的API文档

该视图应与其父视图一样大(减去填充)。从API级别8开始不推荐使用此常量,并由{@code match_parent}代替。


4

match_parent,这意味着该视图希望与其父视图一样大(减去填充)。

wrap_content,这意味着视图要足够大以包围其内容(加上填充)

为了更好地说明,我创建了一个示例布局来演示此概念。为了查看效果,我为每个textView内容添加了一个边框。

在“匹配父级” textView内容中,我们可以看到其布局宽度沿父级整个长度扩展。

但是我们可以在“ Wrap Content” textView内容中看到,它是它的内容(Wrap Content)长度所包裹的布局宽度。

Android版式


4

match_parentfill_parent 是相同的属性,用于定义水平或垂直全屏视图的宽度或高度。

这些属性在android xml文件中使用,像这样。

 android:layout_width="match_parent"
 android:layout_height="fill_parent"

要么

 android:layout_width="fill_parent"
 android:layout_height="match_parent"

fill_parent在以前的版本中使用过,但现在已弃用并由代替match_parent。希望对您有帮助。



3

对我来说,填充父项匹配父项仅执行以下功能:

fill parent:在API 8之前使用

匹配父 这是用来从API 8+ 两者的功能 填充父视图一边填充



2

FILL_PARENT 已从API级别8及更高版本中弃用,并为较高版本重命名为 MATCH_PARENT

两者都是相同的FILL_PARENT并且MATCH_PARENTFILL_PARENT在比API级8和MATCH_PATENT低版本少,使用了较高的API级大于使用超过8。

FILL_PARENTMATCH_PARENT在API级别8和更高版本中重命名),这意味着该视图希望与其父视图一样大(减去填充)

fill_parent:视图应与其父视图一样大(减去填充)。从API级别8开始不推荐使用此常数,并用代替match_parent

有关更多详细信息,请访问页面


0

1. match_parent

当您将布局的宽度和高度设置为match_parent时,它将占用父视图的整个区域,即与父视图一样大。

:如果将parent应用于填充,则不会包含该空间。

默认情况下,当我们创建layout.xml时,我们将RelativeLayout作为默认的父视图,并带有android:layout_width =“ match_parent”和android:layout_height =“ match_parent”,即它占据了移动屏幕的整个宽度和高度。

另请注意,填充适用于所有面,

android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"

现在让我们添加一个子视图LinearLayout并设置其layout_width =“ match_parent”和layout_height =“ match_parent”,图形视图将显示如下内容,

match_parent_example

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.code2care.android.togglebuttonexample.MainActivity" >

android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="11dp"
android:background="#FFFFEE"
android:orientation="vertical" >

2. fill_parent:

这与match_parent相同,fill_parent在API级别8中已贬值。因此,如果您使用的是API级别8或更高级别,则必须避免使用fill_parent

让我们按照与match_parent相同的步骤进行操作,只不过在所有地方都使用fill_parent。

您会看到fill_parent和match parent的行为没有差异。

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.