提问



我对两个XML属性有点困惑:match_parentfill_parent。似乎两者都是相同的。它们之间有什么区别吗?

最佳参考


它们是相同的(在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[71]

其它参考1


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


旧名称fill parent的问题在于它暗示它影响父项的维度,而match parent更好地描述了结果行为 - 将维度与父项匹配。


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

其它参考2


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


LayoutParams.FILL_PARENTLayoutParams.MATCH_PARENT都具有值-1。不确定是什么诱惑谷歌改变从填充父到匹配父:)


由于大多数phones are >= Android 2.2 ..你应该使用Match Parent以便将来兼容......不确定它们什么时候会停止使用旧的Fill Parent常量!

其它参考3


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

其它参考4


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


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_PARENTFILL_PARENT只是用于在其父级中指定View的布局模式的相同整数值(-1,如果您很好奇)的不同常量名称。



  那么为什么要添加MATCH_PARENT呢?



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


其它参考5


MATCH_PARENTFILL_PARENT是一样的吗?


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


那么为什么MATCH_PARENT会被添加?


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


好的,我了解FILL_PARENT/MATCH_PARENT的工作原理。如果我使用其中一个,那有什么关系呢?


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


此外,FILL_PARENT实际上是误导性的。我个人看到人们感到困惑,因为它不像他们想象的那样工作。事实上,我已经看到使用FILL_PARENTMATCH_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


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

其它参考7


match_parent 用于代替 fill_parent ,并将其设置为父进程。只需使用 match_parent ,忘记 fill_parent 。我完全放弃了 fill_parent ,一切都像往常一样完美。


点击这里查看更多信息[72]

其它参考8


只是给它一个更接近它的实际行动的名称"fill_parent"不会填充剩下的空间,因为名称意味着(因为你使用了权重属性)。相反,它占用与布局父级一样多的空间。这就是为什么新名称"match_parent"

其它参考9


两者都具有相似的功能,唯一的区别是fill_parent用于API级别8,match_parent用于API级别8或更高级别之后。

其它参考10


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取代。
我希望它会帮助你。

其它参考11


XML属性中将布局widthheight设置为match_parent时,它将占用父视图所具有的完整区域,即它将与父视图一样大。


<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


[73]


注意:如果父级应用了填充,则不会包含该空格。


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


[74]


所以TextView hight=300dp(父高) - (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}。

其它参考12


fill_parent:视图应该与其父视图一样大。


现在不推荐使用此内容fill_parent,并将其替换为match_parent。

其它参考13


对我来说填充父级匹配父级仅执行相同的功能:


填写父级:
在API 8之前使用


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

其它参考14


match_parent,表示视图想要与其父视图一样大(减去填充)。


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


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


在匹配父textView内容中,我们可以看到它的布局宽度从它的父级全长开始。


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


[75]

其它参考15


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

其它参考16


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


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


对于Android API 1.6到2.1,match_parent会引发错误,因此在这些情况下请使用fill_parent。为了支持向后兼容性,最好使用fill_parent


两者都是静态最终常量,表示值-1


FILL_PARENT在API级别8中已弃用


SO MATCH_PARENT和FILL_PARENT是一样的吗?


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


为什么添加MATCH_PARENT?


正如Roman Guy(Google的Android开发人员)所说,他们已经更改了名称,因为fill_parent让开发人员感到困惑。事实上,fill_parent不会填充剩余的空间(因为你使用了weight属性),但它需要