layout_weight完全不起作用

3
问题在于我想要一个线性布局里面有两个线性布局。并且我希望这两个线性布局根据android:layout_weight属性垂直对齐。但是似乎layout_weight没有起到任何作用。下面是我的布局:
<ScrollView>
    .....
    <LinearLayout>
     ...
       <LinearLayout>                             //1.Here the Linear Layout                                  is not getting aligned properly according to the layout_weight
        ...
           android:layout_height="0dp"
           android:layout_weight="3"
           .
           . 
           .
           .
      </LinearLayout>

      <LinearLayout>                               //2.These two Linear layouts are to be aligned vertically and this second layout is required to use very less space as compared to first layout
       . . . 
           android:layout_height="0dp"
           android:layout_weight="1"
           .
           . 
           .
      </LinearLayout>
   </LinearLayout>
</ScrollView>

以下是完整的XML代码供参考:


    <ScrollView 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"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_margin="16dp"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:orientation="vertical"
            android:layout_weight="3" >

            <EditText
                android:id="@+id/edittext"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="16dp"
                android:layout_marginTop="30dp"
                android:ems="5"
                android:hint="Name"
                android:inputType="text" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="16dp"
                android:text="Toppings"
                android:textAllCaps="true" />

            <CheckBox
                android:id="@+id/whippedcream_checkbox_id"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="16dp"
                android:paddingLeft="24dp"
                android:text="Whipped Cream"
                android:textSize="16sp" />

            <CheckBox
                android:id="@+id/chocolate_checkbox_id"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="16dp"
                android:paddingLeft="24dp"
                android:text="Chocolate"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="16dp"
                android:text="Quantity"
                android:textAllCaps="true" />

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

                <Button
                    android:layout_width="48dp"
                    android:layout_height="48dp"
                    android:onClick="decrement"
                    android:text="-" />

                <TextView
                    android:id="@+id/quantity_text_view"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="8dp"
                    android:layout_marginRight="8dp"
                    android:text="2"
                    android:textColor="@android:color/black"
                    android:textSize="16sp" />

                <Button
                    android:layout_width="48dp"
                    android:layout_height="48dp"
                    android:onClick="increment"
                    android:text="+" />

            </LinearLayout>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:text="order summary"
                android:textAllCaps="true" />


            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:onClick="submitOrder"
                android:text="Order" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="PRICE:" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Coffee: Rs.5 per cup" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Whipped Cream: Rs.1 per cup additional" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Chocolate: Rs.2 per cup additional" />
        </LinearLayout>
    </LinearLayout>
</ScrollView>

给父布局分配权重(weightsum)。 - Jinal Patel
想要布局平均分配空间吗? - Piyush
尝试将layout_height设置为"match_parent" - Federico De Gioannini
1
在为垂直布局分配权重时,始终将高度保持为0dp,对于水平布局则将宽度保持为0dp。 - oldcode
2个回答

4
  1. 在scrollview中添加android:fillViewport="true"
  2. 在主线性布局中添加android:weightSum="4"

下面是完整的代码:

    <?xml version="1.0" encoding="utf-8"?>
   <ScrollView 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:fillViewport="true"
tools:context=".DemoActivity">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp"
    android:orientation="vertical"
    android:weightSum="4">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3"
        android:orientation="vertical">

        <EditText
            android:id="@+id/edittext"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:layout_marginTop="30dp"
            android:ems="5"
            android:hint="Name"
            android:inputType="text" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:text="Toppings"
            android:textAllCaps="true" />

        <CheckBox
            android:id="@+id/whippedcream_checkbox_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:paddingLeft="24dp"
            android:text="Whipped Cream"
            android:textSize="16sp" />

        <CheckBox
            android:id="@+id/chocolate_checkbox_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:paddingLeft="24dp"
            android:text="Chocolate"
            android:textSize="16sp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:text="Quantity"
            android:textAllCaps="true" />

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

            <Button
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:onClick="decrement"
                android:text="-" />

            <TextView
                android:id="@+id/quantity_text_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="8dp"
                android:layout_marginRight="8dp"
                android:text="2"
                android:textColor="@android:color/black"
                android:textSize="16sp" />

            <Button
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:onClick="increment"
                android:text="+" />

        </LinearLayout>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:text="order summary"
            android:textAllCaps="true" />


        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:onClick="submitOrder"
            android:text="Order" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="PRICE:" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Coffee: Rs.5 per cup" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Whipped Cream: Rs.1 per cup additional" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Chocolate: Rs.2 per cup additional" />
    </LinearLayout>
</LinearLayout>


明白了,@Vijay,谢谢。 - Aakash Bansal
@AakashBansal 欢迎 - Vijay Rajput

1

两个线性布局中的所有内容都将其layout_height设置为wrap_content。

重要的是,权重仅在所有未加权的layout_height/layout_width视图占用屏幕空间后才起作用。

示例:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:text="abcd1" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="abcd2" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="abcd3" />


</LinearLayout>

在屏幕上,先为 abcd2 和 abcd3 TextView 分配空间,然后 abcd1 将占据剩余的空间。


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