题 match_parent和fill_parent有什么区别?


我对两个XML属性有点困惑: match_parent 和 fill_parent。似乎两者都是一样的。它们之间有什么区别吗?


1262
2018-04-23 03:31


起源




答案:


它们是相同的(在API级别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


1158
2018-04-23 03:33



如果我为1.6和2.2编写app,我会使用fill_parent来兼容,是不是? - Emerald Hieu
必须有一些差异吗?否则为什么谷歌会弃用它并重新命名为新的? - rxlky
@Halim不,有 没有区别:两者都定义为常量 -1。我觉得你觉得更好,我也没有得到这方面的改进...... :-) - arpy
@jlovison不,没有区别。两者都是 -1。您收到错误,因为较旧的平台不知道同一个常量的新名称。 - Tapirboy
Android Studio仍然在所有默认模板创建的布局中添加“fill_parent”,这太奇怪了!我知道他们是一样的,但我每年都会回到这个问题,以确保没有人发现确实存在差异。 Google / Android团队可以将默认值从“fill_parent”更改为“match_parent”吗?提前致谢! :) - swooby


谷歌更改了名称以避免混淆。

旧名称有问题 fill parent 是因为它暗示它会影响父母的维度 match parent 更好地描述了结果行为 - 将维度与父级匹配。

两个常数都解决了 -1 最后,因此导致应用程序中的相同行为。具有讽刺意味的是,这个改变名称的名称似乎增加了混乱,而不是消除它。


228
2017-12-11 13:23



...除了RelativeLayout的子宽度= match_parent之外,比如说另一个用左手。它与其父级的维度不匹配,它填充了剩余的维度。这只会引起混乱。 - kaay
由于FILL_PARENT和MATCH_PARENT意味着视图想要与其父视图一样大,减去父视图的填充不是内部空间而不是外部维度?现在我更加困惑了! - Caltor
@bnieland我删除了对内部和外部维度的引用,因为他们不同意google文档 developer.android.com/reference/android/view/... 虽然我可以看到类似的(未经证实的)引用 sevennet.org/2014/11/22/... 这是您可能从中获取信息的地方。 - Caltor


功能上没有区别,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常量!


22
2017-09-20 07:25





为了兼容性,最好坚持fill_parent,即支持API 8设备以下时。 但是,如果您的应用针对API 8及更高版本,则应使用match_parent。


10
2017-07-02 10:49



虽然只有向后兼容性。如果 FILL_PARENT 不推荐使用(如上面的Matt Ball所述),那么前向兼容性的唯一选择是 MATCH_PARENT。
同意,但是如果您计划为较低的API级别设备编写代码,例如:2.3,2.2,2.1,那么您需要使用FILL_PARENT。我对旧版本使用match_parent时遇到了一些问题。 - MSA
是时候删除这个答案了。它不再相关,可以为新开发人员提供错误的建议 - Tim Castelijns


fill_parent (改名 MATCH_PARENT 在API级别 8 更高),这意味着视图想要与其父级一样大(减去填充)

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

适用于Android API 1.6 至 2.1  match_parent 会给你一个错误,所以使用 fill_parent 在这些情况下。为了支持向后兼容性,最好使用 fill_parent

  • 两者都是静态最终常量,表示值-1
  • FILL_PARENT 在API级别中已弃用 8

那么MATCH_PARENT和FILL_PARENT是一样的吗?

是, MATCH_PARENT 和 FILL_PARENT 只是用于在其父级中指定View的布局模式的相同整数值(-1,如果您很好奇)的不同常量名称。

那么为什么要添加MATCH_PARENT呢?

我记得Roman Guy(谷歌的Android开发者)说,他们改名了,因为“fill_parent“这让开发人员感到困惑。事实上,”fill_parent“没有填充剩余的空间(因为你使用了weight属性),但它占用了与布局父级一样多的空间。这就是为什么新名称是”match_parent


10
2018-05-23 07:19





MATCH_PARENT 和 FILL_PARENT是相同的?

是, MATCH_PARENT 和 FILL_PARENT 只是用于在其父级中指定View的布局模式的相同整数值(-1,如果您很好奇)的不同常量名称。

那么为什么呢 MATCH_PARENT 添加?

Android团队发现开发人员误解了 FILL_PARENT 意思是a View 会填补其父母留下的剩余空间。实际上,通过指定 FILL_PARENTView 要求和父母一样大。因此,(正如Romain Guy本人在大约10:56的视频中所解释的那样)该常数被重命名 MATCH_PARENT 澄清其用途。

好的,我明白了 FILL_PARENT/MATCH_PARENT 作品。如果我使用其中一个有什么关系?

FILL_PARENT 已弃用。被弃用并不能成为魔鬼,但最终它会消失。您的应用程序更适合未来使用 MATCH_PARENT。当当前选项表现完全相同时,为什么要使用弃用选项?

此外, FILL_PARENT 实际上是误导。我个人看到人们感到困惑,因为它不像他们想象的那样工作。事实上,我已经看到使用两者的单个标签 FILL_PARENT 和 MATCH_PARENT,因为开发人员认为(可以理解)他们是两种不同的布局模式。

你怎么可以开始尝试 FILL_PARENT

这是一个快速的例子 MATCH_PARENT/FILL_PARENT 混乱可能导致人们反复将头放在他们的办公桌上。首先,采用一个包含少数几个的非常简单的布局 View 实例。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <View
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="#FFFF00" />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:background="@android:color/black"
        android:text="@string/hello_world"
        android:padding="50dp" />
    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000" />

</LinearLayout>

6
2018-04-15 04:20



对于xml示例中的行为,如何“匹配”一个不那么令人困惑的术语?请看一下扩大的问题 这里。 - kaay


FILL_PARENT 在API级别8中被弃用 MATCH_PARENT使用更高级别的API


5
2017-09-24 06:56





match_parent  用来代替 FILL_PARENT 并将其设置为父母去的地方。只是用 match_parent 忘记了 FILL_PARENT。我完全放弃了 FILL_PARENT 一切都像往常一样完美。

检查 这里 更多。


5
2018-03-01 08:53





只是给它一个更接近它的实际行动的名称"fill_parent" 不会像名称所暗示的那样填充剩余空间(因为你使用了weight属性)。相反,它占用的空间与布局父级一样多。这就是新名称的原因 "match_parent"


4
2018-04-17 11:34



当他们陈述这一点时,我不理解人们的逻辑。父有填充。或者孩子被留下了另一个。孩子匹配吗?不,是否填补了剩余的空间?在显而易见的Bizzarro World中,我们回答:是的。 - kaay
@kaay我完全同意新名称比旧名称更糟糕。但谷歌说的是这样。 - Caltor