17

我真的尝试过,但我不明白Android如何解释layout_weight设置......

我想要实现的是

  • 顶部固定高度的标题
  • 底部的输入区域,包含 EditText 和 Button
  • 中间的内容部分占用了所有剩余空间

键入时,我想将 EditText 增加到特定高度并在输入的文本超过可用高度时开始滚动。这样做我需要环境LinearLayout与 EditText 一起成长。

如果我为内部定义一个特定的高度,LinearLayout它就不会增长。如果我不这样做,无论我尝试使用什么,内部布局都会占用所有空间而不是 ScrollView layout_weight。:(

我当前的 XML 如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="I'm a header" />
    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="bottom">
        <LinearLayout
            android:id="@+id/itemContainer"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </ScrollView>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:padding="2dp"
        android:gravity="bottom"
        android:isScrollContainer="true"
        android:background="@drawable/steel" >
        <EditText
            android:id="@+id/edittext01"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.2"
            android:scrollbars="vertical"
            android:fadingEdge="vertical"
            android:fadingEdgeLength="60dp"
            android:maxHeight="40dp"
            android:textSize="15sp" />
        <Button
            android:id="@+id/button"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.8"
            android:layout_gravity="right"
            android:text="Send"
            android:textStyle="bold"
            android:textSize="15sp" />
    </LinearLayout>
</LinearLayout>

非常感谢任何提示!

4

4 回答 4

38

layout_weight用于确定在各种小部件获得所需的所有空间后,Android 如何分配任何剩余空间。

假设您连续有 3 个小部件,每个小部件都需要 10 个像素,但您有 50 个像素的空间。以下是 layout_weights 的一些示例以及每个小部件将声明的像素数:

widget1: weight = 1, 30px
widget2: weight = 0, 10px
widget3: weight = 0, 10px

widget1: weight = 1, 20px
widget2: weight = 1, 20px
widget3: weight = 0, 10px

widget1: weight = 1, 16.5px
widget2: weight = 1, 16.5px
widget3: weight = 1, 16.5px

您可以将权重视为可用空间的百分比。它将把所有的值加起来,然后根据需要给出部分。因此,如果它有帮助,您可以使用加起来为 100 的权重来计算百分比:

widget1: weight = 0, 10px
widget2: weight = 25, 15px
widget3: weight = 75, 25px

如果我理解正确,您希望底部小部件以特定大小开始,然后在必要时扩展到某个最大大小,然后滚动。

而且,您希望其上方的小部件占据所有额外空间。

不幸的是,在 Android 中,它实际上不可能指定最大尺寸。我认为你能做的最好的事情就是给 ScrollView 一些固定的大小,layout_weight = 1,并告诉底部的 LinearLayout wrap_content。这会(我认为)导致 LinearLayout 扩展直到它不能再扩展,因为 ScrollView 已经占用了空间。

但是,挑战是为 ScrollView 指定一个固定大小,这在所有不同的屏幕大小和分辨率下都有意义。您最终可能不得不为不同的分辨率创建不同的布局,这可能不值得。就个人而言,我只是给editText一个固定的大小......

于 2010-09-17T17:04:14.047 回答
3

我遇到了类似的问题(刷新时间戳的页脚贴在屏幕底部,ListView/ScrollView 占据了所有剩余空间),经过多次尝试,它使用以下布局对我有用:

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent" 
              android:layout_above="@+id/refresh_date_text" 
              android:layout_alignParentTop="true"
              android:orientation="vertical" 
              >

    <ListView android:id="@android:id/list" android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:background="#FFFFFF"
        android:layout_weight="1" android:divider="@drawable/list_divider"
        android:dividerHeight="1dp" android:drawSelectorOnTop="false" />

    <TextView android:id="@android:id/empty"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="#ffffff"
              android:gravity="center_horizontal"
              android:paddingTop="10dp"
              android:text="The list is empty."/>

</LinearLayout>

<TextView android:id="@+id/refresh_date_text"
          android:layout_width="match_parent" 
          android:layout_height="wrap_content" 
          android:layout_alignParentBottom="true"
          android:gravity="center_horizontal" 
          android:background="#f0f0f0" 
          android:textStyle="italic" 
          android:textSize="12dp"
          />
</RelativeLayout>

使用滚动条时不剪裁 ListView,在所有方向上完美对齐,正确显示“列表为空”文本。

于 2011-11-07T11:46:00.717 回答
1

我相信使用RelativeLayout 会更好。添加您的标题,并将其设置为layout_alignParentTop="true". 然后添加您的 EditText 和 Button,将该区域设置为layout_alignParentBottom="true". 然后,添加中心区域,将宽度和高度设置为fill_parent, 并设置layout_above="{the id of the EditText/Button layout}", 和layout_below="{the id of the header layout}"

我没有 Eclipse 在工作,否则我会为您测试它,但这应该可以。

于 2010-09-17T15:43:25.653 回答
-1
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1"
>
<TextView
 android:text=" TextView " 
 android:textColor="#ffffff"
 android:textSize="15sp"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:background="#ff0000"
 />
 <EditText
  android:text=" EditText " 
  android:textSize="15sp"
  android:layout_width="250dp"
  android:layout_weight="1"
  android:layout_height="0dp"
  />
 <Button
    android:text=" button " 
    android:textColor="#000000"
    android:textSize="15sp"
    android:gravity="center_vertical|center_horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
  </LinearLayout>

这将有助于

于 2012-04-16T07:54:22.787 回答