match_parent和fill_parent有什么区别?

vns*_*tty 1371 android android-layout

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

Mat*_*all 1220

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

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

Tap*_*boy 244

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

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

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

  • ...除了RelativeLayout的子宽度= match_parent之外,比如说,另一个用左手.它与其父级的维度不匹配,它填充了剩余的维度.这只会引起混乱. (17认同)
  • 由于FILL_PARENT和MATCH_PARENT意味着视图想要与其父级一样大,减去父级的填充不是内部空间而不是外部维度?现在我更加困惑了! (7认同)

Uma*_*air 27

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


Olu*_*oke 11

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

  • 虽然只有向后兼容性.如果不推荐使用`FILL_PARENT`(如上面的Matt Ball所述),那么前向兼容性的唯一选择是`MATCH_PARENT`. (8认同)
  • 同意,但是如果你有计划为较低的API级别设备编写代码,例如:2.3,2.2,2.1,那么你需要使用FILL_PARENT.我在旧版本中使用match_parent时遇到了一些问题. (2认同)

Ava*_*mar 8

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


Koe*_*ech 8

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

点击这里查看更多.


Xar*_*mer 6

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

  • 当他们陈述这一点时,我不理解人们的逻辑.父有填充.或者孩子被留下了另一个.孩子匹配吗?不,它填补了剩余的空间吗?在显然是Bizzarro World的地方,我们回答:是的. (2认同)

小智 6

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


小智 5

当设置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>
Run Code Online (Sandbox Code Playgroud)

野兔父母是红色的,孩子是绿色的。儿童占据所有区域。因为是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>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

所以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}代替。