我真的尝试过,但我无法理解Android如何解释layout_weight
设置......
我想要实现的是
键入时我想将EditText增长到特定高度,并在输入的文本超出可用高度时开始滚动。这样做我需要周围的LinearLayout
与EditText一起成长。
如果我为内部LinearLayout
定义一个特定的高度,它将不会增长。如果不这样做,无论我尝试使用layout_weight
,内部布局都会占用所有空间而不是ScrollView。 :(
我当前的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>
非常感谢任何提示!
答案 0 :(得分:37)
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一个固定的大小...
答案 1 :(得分:3)
我遇到了类似的问题(一个页脚,刷新时间戳贴在屏幕底部,ListView / ScrollView占用了所有剩余空间),经过多次尝试,它使用以下布局为我工作: / p>
<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,在所有方向上都能完美对齐,正确显示“列表为空”文本。
答案 2 :(得分: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在工作,否则我会为你测试它,但这应该有效。
答案 3 :(得分:-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>
这将有助于