【发布时间】:2015-06-02 04:49:22
【问题描述】:
在片段示例中布局宽度始终为零。这个值的背后是什么?
【问题讨论】:
-
是否也设置了 layout_weight 值?
标签: android android-3.0-honeycomb
在片段示例中布局宽度始终为零。这个值的背后是什么?
【问题讨论】:
标签: android android-3.0-honeycomb
为了解释清楚,请查看开发指南中的片段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%。
【讨论】:
这对我有用:
对布局中的所有权重求和。在 Squonk 发布的示例中,有 2 个片段,总重量为 3。
片段 ArticleListFragment 的权重=1,这意味着 大小将是屏幕的 1/3(3 是总重量)。
片段 ArticleReaderFragment 的权重 =2,这意味着大小将是屏幕的 2/3。
希望对你有帮助。
【讨论】: