为什么android:layout_width =“0px”的片段?

时间:2011-09-10 07:56:48

标签: android android-3.0-honeycomb

片段示例中的布局宽度始终为零。这个价值的背后是什么?

2 个答案:

答案 0 :(得分:33)

为了解释,请查看开发指南中的Design Philosophy片段。

如果您查看图像,则会在左侧显示手机如何显示初始活动A,然后在选择列表中的项目时启动活动B.

然而,在右边,它显示了这两个活动如何同时显示为碎片。注意片段A占据屏幕的1/3,片段B占据屏幕的2/3。

现在从同一个Dev Guide文章中的Adding a fragment to an activity查看该布局的XML ...

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment android:name="com.example.news.ArticleListFragment"
            android:id="@+id/list"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
    <fragment android:name="com.example.news.ArticleReaderFragment"
            android:id="@+id/viewer"
            android:layout_weight="2"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
</LinearLayout>

您可以看到两个片段的{0}都是layout_width,但它们每个都有一个layout_weight属性。第一个的权重为1,第二个的权重为2。

简而言之,当使用这样的布局时,将'width'设置为0意味着您不希望显式强制执行宽度,并且OS应该将相对宽度计算为总权重的分数。换句话说,1 + 2 = 3(总重量)但第一个活动要宽度为1 /总重量=屏幕宽度的1/3,而碎片B想要2 /总宽度=屏幕宽度的2/3。 / p>

现在假设你添加了第三个片段,它也有width = 0dp和weight = 2。在这种情况下,总重量为1 + 2 + 2 = 5,第一个片段的相对宽度为1/5,屏幕的另外两个片段为2/5或20%/ 40%/ 40%。 / p>

答案 1 :(得分:0)

这对我有用:

  1. 对布局中的所有权重求和。在Squonk发布的示例中,有2个片段,总重量为3。

  2. 片段ArticleListFragment的权重= 1,意思是 尺寸将是屏幕的1/3(3是总重量)。

  3. 片段ArticleReaderFragment的权重= 2,意味着大小将是screem的2/3。

  4. 希望它有所帮助。