Android布局:如何避免嵌套权重?

10

各位,我正在尝试为一个包含四个不同Fragment的活动编写布局,其中包括一个列表Fragment和三个与详细信息相关的Fragment。我想让它看起来像下面的图示:

enter image description here

使用LinearLayout可以获得列表Fragment和细节区域(其他三个Fragment所在的区域)之间30/70的比例。但是,在处理这三个Fragment时,我真的不知道如何保持我期望的比例,因为你不能嵌套带有weightSum属性的布局。

我已经尝试使用RelativeLayouts,但不想使用'wrap_content'值,因为某些内容可能比其他内容更大,从而破坏我试图实现的外观。

有没有方法可以做到这一点? 我知道TableLayouts,但据我所知,它们就像HTML表格:用于数据,而不是作为布局工具...


嵌套LinearLayout的问题到底是什么?因为如果你真的想定义一些30/70或50/50的比例,它们是你最好(也许是唯一)的选择。 - Orabîg
是的,它们对于大部分情况非常好用。如果我有2个片段(列表片段和包括其他3个片段的详细信息片段),那么这将是我的选择。但是,由于这3个片段必须放在2列中,它们需要一个额外的LinearLayout,其中weightSum用于制作这两列。右侧的列还需要另一个带有weightSum的LinearLayout。我已经尝试过嵌套类似的东西,但Android不让我这样做:( - Frank
2个回答

13
嵌套权重应该可以正常工作,我已经用过几次,尽管Eclipse显示提示说“嵌套权重对性能不好”。您可以尝试以下内容:

嵌套权重应该没问题的,我用了几次,尽管 Eclipse 显示提示说“嵌套权重会影响性能”。

您可以尝试类似这样的代码:


您可以尝试类似这样的代码:

<LinearLayout android:id="@+id/main_layout"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:weightSum="1"
    android:orientation="horizontal">

    <LinearLayout android:id="@+id/layout_fragment_a"
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:layout_weight="0.5"/>

    <LinearLayout android:id="@+id/layout_container_b_c"
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:layout_weight="0.5"
        android:weightSum="1"
        android:orientation="vertical">

        <LinearLayout android:id="@+id/layout_fragment_b"
            android:layout_height="0dp"
            android:layout_width="match_parent"
            android:layout_weight="0.7"/>

        <LinearLayout android:id="@+id/layout_fragment_c"
            android:layout_height="0dp"
            android:layout_width="match_parent"
            android:layout_weight="0.3"/>

    </LinearLayout>

</LinearLayout>

而我也曾经用这种方式。XML 可能会存在一些错误和拼写错误(现在正在响应框中进行正确的书写 :P),但它应该会帮助你理解:有一个主要布局(main_layout),使用完整的空间,并包含两个第二级布局,每个占50% 的宽度(fragment_a 和 container_b_C),以及另外两个布局在其中一个第二级布局中将该布局的空间分成70/30(fragment_b 和 fragment_c):)

希望它能帮到你!


就是这样,"对性能不利"。我知道它有点 '错误',但你和 Stack Overflow 外部的人都告诉我这是最好的方法。感谢确认 :D - Frank
感谢展示“match_parent”的战略使用。在嵌套的加权布局中,使用“wrap_content”效果不佳。 - Someone Somewhere
Eclipse从未表示它无法正常工作。 如果您将其用于列表,滚动会很慢,因为每次发生渲染时都必须测量视图。 - Sreekanth Karumanaghat

0

为什么不尝试:

<LinearLayout android_width="30.0" android_height="fill_parent"/>
<LinearLayout android_width="50.0" android_height="fill_parent"/>
<LinearLayout android_width="50.0" android_height="fill_parent">
      <LinearLayout android_width="fill_parent" android_height="70.0"/>
      <LinearLayout android_width="fill_parent" android_height="30.0"/>
</LinearLayout>

我没有测试过它(现在不在我的Eclipse工作区中),但这应该可以解决问题...


好的,我刚试了一下,Eclipse显示:属性“layout_height”中的维度“70.0”缺少单位! - Frank
是的,抱歉。我是指0.7而不是70.0(很久以前就没有使用这些参数了...)。不过,与此同时你已经得到了答案。 - Orabîg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接