Android layout_weight没有做任何事情

时间:2013-01-09 16:53:52

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

我有一个LinearLayout,其中2个按钮水平分割。

我希望这些按钮位于屏幕的底部,因此我添加到了布局中 android:layout_weight="bottom"并且没有任何变化!

    <?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="fill_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"
    android:orientation="vertical" >

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

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Start" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Stop" />
    </LinearLayout>

</LinearLayout>

4 个答案:

答案 0 :(得分:1)

您需要将按钮的layout_width设置为0dp

此外,没有宽度属性:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background"
android:orientation="vertical" >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="2"
android:layout_alignParentBottom="true" >

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Start" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Stop" />
</LinearLayout>

</RelativeLayout>

答案 1 :(得分:1)

layout_weight用于在 layout_width或layout_height被考虑之后划分剩余空间

当你说

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0.5"
    android:text="Start"
    android:width="0dp" />

android:layout_width="fill_parent"表示将按钮的大小设置为与其父级一样宽。对水平线性布局中的两个按钮执行此操作将只生成一个可见按钮;第二个实际上位于第一个的右侧,但是在屏幕外。

如果您为两个按钮设置layout_width0dp,则两个按钮的宽度都相同。

如果您在两个按钮上都设置layout_widthwrap_content,则两者都会以“首选”宽度开始,然后根据layout_width的比例为其分配额外的空间到父布局中所有视图的layout_width之和。

如果您想要底部的按钮,您可以将布局更改为相对布局(并使用其他答案中提到的alignParentBottom),或嵌套在垂直线性布局内(水平布局将具有layout_height='wrap_content'layout_width='fill_parent')。

因为你提到了嵌套,你可以使用像

这样的东西
<LinearLayout
    andrdoid:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    ...
    >
        <LinearLayout
            anddoid:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            ...
            >
                <Button
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    ... />
                <Button
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    ... />
        </LinearLayout>
</LinearLayout>

(或使用wrap_content按钮的layout_width以文字宽度启动它们

答案 2 :(得分:0)

将按钮上的layout_width参数更改为

android:layout_width="0dp"

您也可以使用layout_alignParentBottom

android:layout_alignParentBottom="true"

您可以像以下

一样创建布局文件
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content">

  <!-- Other Components of your layout file -->
  <LinearLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_gravity="bottom"
  android:layout_alignParentBottom="true"
  android:orientation="horizontal"
  android:weightSum="2">
    <Button
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:text="Start"/>

    <Button
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:text="Stop"/>
  </LinearLayout>
</RelativeLayout>

答案 3 :(得分:0)

你的标题说layout_weight不适合你,但问题正文暗示它工作得很好。 layout_weight属性应该会使您的按钮占据每个宽度的一半。

屏幕底部的定位是另一个问题。根据您最近编辑过的xml,将android:gravity="bottom"添加到父LinearLayout,或android:layout_gravity="bottom"添加到子LinearLayout