Android layout_weight无法按预期工作

时间:2016-05-22 10:58:43

标签: android android-layout android-linearlayout

我正在尝试实现一个将分为2个子布局的布局。我希望左侧布局为屏幕的1/4,而右侧布局为屏幕的剩余3/4。我的目标如下:如果用户按下按钮,则左侧布局将被隐藏,正确的布局将占据整个屏幕(不确定这是否有效)。

为了达到这个目的,我尝试使用以下布局,这似乎并不像预期的那样。

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

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

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:elevation="4dp"
        android:padding="5dp"
        android:theme="@style/ToolbarTheme" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <LinearLayout
            android:id="@+id/categoriesLayout"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="#000000"
            android:orientation="vertical">

            <!-- added a dummy button to see something -->
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>

        <View
            android:layout_width="2dp"
            android:layout_height="fill_parent"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:background="@android:color/holo_blue_light" />

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:background="#FFFFFF">

            <!-- added a dummy button to see something -->
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

如下图所示,问题是左LinearLayout仅与内容一样宽,而实际上并没有占据屏幕的1/4。

enter image description here

3 个答案:

答案 0 :(得分:2)

您的问题是因为您将其父级布局的宽度设置为wrap_content,如果您想要一个全屏宽度,只需将其设置为match_parent,那么它将是这样的:< / p>

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

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:elevation="4dp"
        android:padding="5dp"
        android:theme="@style/ToolbarTheme" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

    .
    .
    .

答案 1 :(得分:1)

使用     机器人:weightSum = “4” 在你的父布局!

您可以以编程方式调用

来隐藏layout1
layout1.setVisibility(View.INVISIBLE);

希望这有帮助。

答案 2 :(得分:1)

您需要android:weightSum属性。

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

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

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:elevation="4dp"
        android:padding="5dp"
        android:theme="@style/ToolbarTheme" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:weightSum="1"
        android:orientation="horizontal">

        <LinearLayout
            android:id="@+id/categoriesLayout"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight=".75"
            android:background="#000000"
            android:orientation="vertical">

            <!-- added a dummy button to see something -->
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>

        <View
            android:layout_width="2dp"
            android:layout_height="fill_parent"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:background="@android:color/holo_blue_light" />

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight=".25"
            android:background="#FFFFFF">

            <!-- added a dummy button to see something -->
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>