layout_weight如何工作?

时间:2014-06-24 21:50:56

标签: java android view graphics

我研究了另一个stackoverflow问题//回答,发现layout_weight的工作定义是"这个属性赋予"重要性"视图的值,并允许它展开以填充父视图中的任何剩余空间" (来源:What does android:layout_weight mean?

我正在尝试将该概念应用于我的代码。 目前我的代码(没有布局权重)是

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    <TextView 
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="Home"
       android:gravity="center"
     />
    <TextView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="About"
       android:gravity="center"
      />
</LinearLayout>

目前的布局为http://imgur.com/eq6q0I8 (家庭应该占用match_parent的所有空间bc)

但是如果我添加android:layout_weight =&#34; 1&#34;两个文本视图, 我得到这个布局http://imgur.com/fscM0Zr

(两者都可见且共享相同的空间)

我的问题是这是如何从layout_weight的工作定义中发生的?此示例中的layout_weight将为文本视图分配额外的空间。但是没有额外的空间,因为第一个具有宽度match_parent,这将使它占据整个父级的宽度(没有额外的空间)

1 个答案:

答案 0 :(得分:1)

这是怎么回事?

要解决这些问题,请说明LinearLayout的宽度为100px。

  • TextView Home是MATCH_PARENT所以100px
  • TextView关于是MATCH_PARENT所以100px

因此,儿童使用的总宽度为100px + 100px = 200px

现在,让我们计算剩余宽度:这是所有孩子使用的可用宽度和宽度之间的差异:

RemainingWidth = AvailableWidth (100px) - TotalWidthUsedByChildren (200px) = -100px

请注意,这是否定的

有2个子视图,因此根据其重量将剩余宽度分配给每个视图。在这种情况下,每个孩子都会收到剩余的50%...这意味着每个孩子都会收到-50px。

最后:

  • TextView Home宽度为100px + -50px = 50px
  • TextView关于宽度为100px + -50px = 50px

完美的逻辑,但不是很直观。因此,使用layout_weight时的建议是始终将chid视图的宽度设置为0。