layout_weight意味着嵌套的LinearLayout

时间:2013-08-09 10:38:49

标签: android android-layout android-layout-weight

在此布局定义中:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="7"
            android:id="topLayout"
            android:background="@android:color/holo_green_light">

    </LinearLayout>

    <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="horizontal"
            android:layout_weight="2"
            android:id="bottomLayout"
            android:background="@android:color/holo_orange_light">

    </LinearLayout>
</LinearLayout>

我不明白为什么命名的“bottomLayout”高于topLayout。您可以在Android Studio中看到结果的评论截图。

4 个答案:

答案 0 :(得分:1)

首先修复你的xml并将layout_height更改为0dp。这是因为你正在使用权重来管理高度,同时你正在指示它填充父级。 其次,如果您将通过为每个权重赋予1来进行实验,您会注意到两个布局现在都是平均分配的。我假设权重是添加视图后剩余的可用空间的计算,即计算权重根据可用空间。

通过点击屏幕上任何溢出布局的轮廓来检查预览,您可能会发现布局的某些部分位于屏幕外。为了获得一些清晰度,或者根据百分比使用权重,例如,而不是在2和7中给出0.2和0.8的尝试,这将平衡重量。或者您可以使用属性“weight_sum”来声明总可用权重,然后均匀分配,例如使用weight_sum 100,您可以遵循基于百分比的方法。

为了进一步明确,请参阅此link

答案 1 :(得分:1)

LinearLayout孩子的布局是为了宣布他们。

layout_weight机制只根据其权重按比例分配任何剩余空间,不会影响排序。

这与“权重”参数影响项目在容器中的位置的其他环境不同。

答案 2 :(得分:0)

如果你的代码是这样的,那么你可以找到解决方案

    <LinearLayout
        android:![enter image description here][1]orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="7"
        android:id="topLayout"
        android:background="@android:color/holo_green_light">

</LinearLayout>

<LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_weight="3"
        android:id="bottomLayout">

    <Button
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="b"
            android:id="@+id/button4"
            android:layout_gravity="center"
            android:background="@android:color/holo_orange_light"/>

</LinearLayout>

答案 3 :(得分:0)

如果你想在linearlayout中使用layout_weight,那么你必须在父LinearLayout中添加weightSum

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="10"
        android:orientation="vertical"
    >

        <--70% of free space in parent LinearLayout-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="7"
        >
        </LinearLayout>
        <--30% of free space in parent LinearLayout-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="3"
        >
        </LinearLayout>

    </LinearLayout>

在xml评论中我在 LinearLayout中写了70%的自由空间 如果你添加一些具有精确高度的布局,那么你的线性布局将占据该特定线性布局的左高度的70%和30% 例如,如果您的父级linearlayout的高度为100dp

您的孩子布局将首先绘制70dp,第二个将绘制30dp高 但是如果你添加一些高度为50dp的imageview,你的第一个孩子linearlayout将高约35dp,第二个为15dp