match_parent和fill_parent有什么区别?

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

294327 次浏览

它们是一样的(在API级别8+中)。使用match_parent

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

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

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

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

LayoutParams.FILL_PARENTLayoutParams.MATCH_PARENT都有值-1。不确定是什么诱使谷歌从填充父级更改为匹配父级:)

由于大多数phones are >= Android 2.2…你应该使用匹配父来实现未来的兼容性……不确定他们何时会停止旧的填充父常量!

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

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

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

只是为了给它取个更贴近实际的名字"fill_parent"没有像名称所暗示的那样填充剩余的空间(因为您使用了权重属性)。相反,它占用的空间与其布局父级一样多。这就是为什么新名称是"match_parent"

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

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

查看这里了解更多。

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。希望对你有帮助

两者都有类似的功能,唯一的区别是fill_parent在API级别8之前使用,match_parent在API级别8或更高级别之后使用。

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

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

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

填写父:在API 8之前使用

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

match_parent,这意味着视图想要和它的父视图一样大(减去填充)。

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

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

在“匹配父级”文本视图内容中,我们可以看到它的布局宽度分布在父级的整个长度之外。

但是我们可以看到在“包装内容”文本视图内容中,它的布局宽度包裹在它的内容(包装内容)长度中。

Android布局

当您在XML属性中将布局widthheight设置为match_parent时,它将占据父视图的完整区域,即它将与父视图一样大。

<LinearLayoutandroid:layout_width="300dp"android:layout_height="300dp"android:background="#f9b0b0">
<TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="#b0f9dc"/>
</LinearLayout>

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

在此处输入图片描述

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

<LinearLayoutandroid:layout_width="300dp"android:layout_height="300dp"android:background="#f9b0b0"android:paddingTop="20dp"android:paddingBottom="10dp">
<TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="#b0f9dc"/>
</LinearLayout>

在此处输入图片描述

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

fill_parentvsmatch_parent

fill_parentmatch_parent的前身

对于API级别8及更高版本,fill_parent重命名为match_parent,现在不建议使用fill_parent

所以fill_parentmatch_parent是一样的。

fill_parentAPI文档

视图应与其父视图一样大(减去填充)。此常量从API级别8开始不建议使用,并由{@codematch_parent}替换。

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

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.fill_parent:

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

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

你会发现fill_parent和匹配父节点的行为没有区别。

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

FILL_PARENTMATCH_PARENT都是相同的,FILL_PARENT用于低于API级别8的较低版本,MATCH_PATENT用于高于8的较高API级别。

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

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

更多详情请访问这个页面

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

它们是一样的(在API级别8+中)。使用match_parent。

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