ChatGPT解决这个技术问题 Extra ChatGPT

match_parent 和 fill_parent 有什么区别?

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


M
Matt Ball

它们是同一回事(在 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


如果我为 1.6 和 2.2 编写应用程序,我将使用 fill_parent 来实现兼容性,对吗?
应该有一些不同吧?否则为什么谷歌会弃用它并重命名新的?
@Halim 不,没有区别:两者都定义为常量 -1。我你感觉好多了,我也没有得到改善...... :-)
@jlovison 不,没有区别。两者都是-1。您会收到错误消息,因为旧平台不知道相同常量的新名称。
奇怪的是,Android Studio 仍然将“fill_parent”放在所有默认模板创建的布局中!我知道它们是相同的,但我每年都会回到这个 SO 问题,以确保没有人发现确实存在差异。 Google/Android 团队能否将默认值从“fill_parent”更改为“match_parent”?提前致谢! :)
J
J.G.Sebring

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

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

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


...除了RelativeLayout 的宽度=match_parent 的孩子,比如说,leftOf 另一个。它与父级的维度不匹配,它填充了其中剩余的内容。这只会造成混乱。
由于 FILL_PARENT 和 MATCH_PARENT 意味着视图想要与其父级一样大,减去父级的填充不是内部空间而不是外部尺寸吗?现在我更加困惑了!
@bnieland 我删除了对内部和外部尺寸的引用,因为它们与 developer.android.com/reference/android/view/… 的 google 文档不一致,尽管我可以在 sevennet.org/2014/11/22/… 看到类似的(未经证实的)引用,您可能从那里获得信息.
U
Umair

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

LayoutParams.FILL_PARENTLayoutParams.MATCH_PARENT 的值都为 -1。不确定是什么诱使谷歌从 Fill Parent 更改为 Match Parent :)

由于大多数 phones are >= Android 2.2 .. 您应该使用 Match Parent 以实现未来的兼容性...不确定他们何时会停止使用旧的 Fill Parent 常量!


A
Avanish Kumar

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


K
Koech

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

查看 here 了解更多信息。


P
Praveen Gaur

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


佚名

当您在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

https://i.stack.imgur.com/Cy8Jt.png

注意:如果父级应用了填充,则该空间将不包括在内。

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

https://i.stack.imgur.com/iVwD6.png

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

fill_parent 与 match_parent

fill_parentmatch_parent 的旧名称

对于 API 级别 8 和更高级别,fill_parent 重命名为 match_parent,现在已弃用 fill_parent

所以 fill_parentmatch_parent 是相同的。

fill_parent 的 API 文档

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


Z
Zar E Ahmer

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


我不明白人们这样说的逻辑。父级有填充。或者孩子是别人的。孩子符合吗?不,它会填满剩余的空间吗?在这里,显然是 Bizzarro World,我们回答:是的。
@kaay 我完全同意新名称比旧名称差。但谷歌所说的就是这样。
N
Nikita Prajapati

fill_parent:视图应该和它的父级一样大。

现在此内容 fill_parent 已弃用并由 match_parent 替换。


S
Subarata Talukder

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

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

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

在“Match parent” textView 内容中,我们可以看到它的布局宽度超出了它的父级全长。

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

https://i.stack.imgur.com/w3EtV.png


问题是关于 match_parent(您已涵盖)和 fill_parent(您未解决)之间的区别。相反,您将其与 wrap_content 进行了比较,该问题并未询问。
M
Meenal

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


X
Xcode

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

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

match parent 这在 API 8+ 中使用过 两者的功能 填充父视图除了填充


S
Sarvesh Thiruppathi

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


V
Vineeth Sai

FILL_PARENT 已从 API 级别 8 及更高版本中弃用,对于更高版本,它被重命名为 MATCH_PARENT

两者都是相同的 FILL_PARENTMATCH_PARENTFILL_PARENT 用于低于 API 级别 8 的较低版本,而 MATCH_PATENT 用于高于 8 的更高 API 级别。

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

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

欲了解更多详情,请访问this页面


A
Akanshi Srivastava

FILL_PARENTMATCH_PARENT 都是相同的属性。 FILL_PARENT 在 API 级别 8 中已弃用。


N
Nishad Vartak

它们是同一回事(在 API 级别 8+ 中)。使用 match_parent。

FILL_PARENT 和 MATCH_PARENT 是相同的属性。 FILL_PARENT 在 API 级别 8 中已弃用。


h
hossam scott

1. match_parent

当您将布局的宽度和高度设置为match_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. 填充父:

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

让我们遵循与 match_parent 相同的步骤,只是在任何地方都使用 fill_parent。

您会看到 fill_parent 和 match parent 的行为没有区别。