【问题标题】:Why android:layout_width=”0px” for fragments?为什么 android:layout_width=”0px” 用于片段?
【发布时间】:2015-06-02 04:49:22
【问题描述】:

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

【问题讨论】:

  • 是否也设置了 layout_weight 值?

标签: android android-3.0-honeycomb


【解决方案1】:

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

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

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

现在从同一篇开发指南文章中的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>

您可以看到两个 Fragment 都有一个 0dp 的 layout_width,但它们也都有一个 layout_weight 属性。第一个的权重为 1,第二个的权重为 2。

简而言之,当使用这样的布局时,将“宽度”设置为 0 意味着您不想明确地强制使用宽度,并且操作系统应该将相对宽度计算为总重量的一部分。换句话说,1+2=3(总重量),但第一个 Activity 想要的宽度为 1 / 总重量 = 屏幕宽度的 1/3,而 Fragment B 想要 2 / 总宽度 = 屏幕宽度的 2/3。

现在假设您添加第三个片段,该片段也具有宽度=0dp 和重量=2。在这种情况下,总重量为 1+2+2=5,第一个片段的相对宽度为 1/5,其他两个片段为屏幕的 2/5 或 20% / 40% / 40%。

【讨论】:

    【解决方案2】:

    这对我有用:

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

    2. 片段 ArticleListFragment 的权重=1,这意味着 大小将是屏幕的 1/3(3 是总重量)。

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

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多