【问题标题】:What is the difference between match_parent and fill_parent?match_parent 和 fill_parent 有什么区别?
【发布时间】:2011-08-11 08:13:24
【问题描述】:

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

【问题讨论】:

标签: android android-layout


【解决方案1】:

它们是相同的东西(在 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”?提前致谢! :)
【解决方案2】:

Google 更改了名称以避免混淆。

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

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

【讨论】:

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      查看here 了解更多信息。

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

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

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

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

          fill_parent 与 match_parent

          fill_parentmatch_parent 的旧名称

          对于 API 级别 8 及更高级别,fill_parent 重命名为 match_parentfill_parent 现在已弃用。

          所以fill_parentmatch_parent 是相同的。

          fill_parent 的 API 文档

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

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

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

            现在该内容 fill_parent 已被弃用并被 match_parent 取代。

            【讨论】:

              【解决方案10】:

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

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

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

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

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

              【讨论】:

              • 问题是关于match_parent(您已涵盖)和fill_parent(您未提及)之间的区别。相反,您将其与 wrap_content 进行了比较,而问题并未提及。
              【解决方案11】:

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

              【讨论】:

                【解决方案12】:

                对我而言,fill parentma​​tch parent 只执行相同的功能:

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

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

                【讨论】:

                  【解决方案13】:

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

                  【讨论】:

                    【解决方案14】:

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

                    两者相同 FILL_PARENTMATCH_PARENT,FILL_PARENT 用于低于 API 级别 8 的较低版本,而 MATCH_PATENT 用于高于 API 级别 8 的较高版本。

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

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

                    更多详情请访问this页面

                    【讨论】:

                      【解决方案15】:

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

                      【讨论】:

                        【解决方案16】:

                        它们是相同的东西(在 API 级别 8+ 中)。使用 match_parent。

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

                        【讨论】:

                          【解决方案17】:

                          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 的行为没有区别。

                          【讨论】:

                            猜你喜欢
                            • 2013-04-02
                            • 2010-09-30
                            • 2012-06-29
                            • 2012-04-14
                            • 1970-01-01
                            • 1970-01-01
                            • 2017-12-06
                            • 2012-01-20
                            • 1970-01-01
                            相关资源
                            最近更新 更多