layout_weight在设备上给出了不可预知的结果

时间:2014-12-04 12:58:11

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

我目前正在尝试整理一个由几个输入控件和一个列表视图组成的布局,并使用layout_weight我已经让它在Android Studio预览中看起来像我想要的那样。但是,在实际设备上,布局看起来完全不同。

我对Android很新,并且以前在布局方面遇到了一些问题,所以我可能会遗漏一些东西。但是,我一直在阅读不同类型的布局和layout_weight,到目前为止我发现的所有内容都让我觉得结果在Android Studio的预览中看起来像。在这种情况下,我可以很容易地解决另一种布局,但我更愿意真正了解错误,因为我将来可能再次面临同样的问题。

下面是我的布局代码和比较图片。 任何想法或提示都非常感谢。

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

    <EditText
        android:id="@+id/input_title"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:hint="@string/title"/>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <Button
            android:id="@+id/input_submit"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentRight="true"
            android:text="@string/input_submit"/>

        <Button
            android:id="@+id/input_date"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_toLeftOf="@id/input_submit"
            android:text="@string/input_date"/>

        <EditText
            android:id="@+id/input_amount"
            android:layout_width="fill_parent"
            android:layout_height="match_parent"
            android:layout_alignBottom="@id/input_date"
            android:layout_toLeftOf="@id/input_date"
            android:hint="@string/amount"
            android:inputType="numberDecimal"/>

    </RelativeLayout>

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="6"/>

</LinearLayout>

Android Studio预览:http://i.stack.imgur.com/4bWM6.png

设备上的实际布局:http://i.stack.imgur.com/MJbOX.png

2 个答案:

答案 0 :(得分:0)

发生这种情况是因为您没有向父版布局声明标准 WeightSum ,因此请将android:weightSum="8"添加到您的主LinearLayout

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

<!--  your code -->

</LinearLayout>

并且权重必须 8 ,因为您为视图和布局提供了权重( 1 1 6 ),所以父布局的整个weight_sum必须 8

答案 1 :(得分:0)

需要为ListView和input_amount构建layout_weight,其余的是wrap_content:

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

    <EditText
        android:id="@+id/input_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/title"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <EditText
            android:id="@+id/input_amount"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:hint="@string/amount"
            android:inputType="numberDecimal"/>
        <Button
            android:id="@+id/input_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/input_date"/>

        <Button
            android:id="@+id/input_submit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/input_submit"/>

    </LinearLayout>

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

</LinearLayout>