我知道这个话题已经讨论了很多次,但我发现它太混乱了,所以在试着看看SO和Google后,我决定问一下。
我有一个辅助Activity
从主要调用。布局定义如下(我发布了我认为相关的部分,如果需要额外的东西,只需要它)。在代码下方,您可以找到一些屏幕截图。
<LinearLayout
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:background="@drawable/rounded_edges"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".Bloqueados" >
<!-- TextView to set the activity tittle (I'm using a customized theme) -->
<TextView
... />
<!-- LinearLayout which shows the orange square -->
<LinearLayout
android:id="@+id/block_info"
android:background="@drawable/rounded_edges_orange"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<EditText
... >
</EditText>
</LinearLayout>
<!-- LinearLayout to ask for the user to be blocked -->
<LinearLayout
... >
<EditText
... >
<requestFocus />
</EditText>
<ImageButton
... />
</LinearLayout>
<!-- Here it goes, the LinearLayout that contains the ListView -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:orientation="vertical" >
<!-- This TextView is shown only if the ListView is empty -->
<TextView
android:id="@+id/block_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:paddingLeft="30dp"
android:text="@string/block_empty"
android:textStyle="italic"
android:textColor="#3085ef" />
<!-- Else, this ListView is shown -->
<ListView
android:id="@+id/block_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical" >
</ListView>
<!-- Save button -->
<Button
android:id="@+id/btn_block_save"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:onClick="btn_close"
android:background="@drawable/botones"
android:textColor="#FFFFFF"
android:text="@string/btn_save" />
</LinearLayout>
</LinearLayout>
所以,从图形上看,这是前截图:
这里没什么奇怪的。因此,让我们用ListView
填充一些项目:
好的,仍然没什么奇怪的,但屏幕高度现在已经填满了。让我们在ListView中添加另一个项目。
这就是问题所在。 “保存”按钮已消失(好吧,它位于最后一个ListView
项目下方,但它超出了屏幕布局)。我知道使用ScrollView
+ ListView
是一种不好的做法,所以即使我有一个完美的解决方法,我也想避免使用它并正确地做事。所以问题是:当下一个添加的项目将其下方的元素移出屏幕布局时,如何使ListView
开始滚动?
谢谢!
答案 0 :(得分:2)
layout_height =“wrap_content”表示增长直到显示所有孩子。尝试使用layout_height =“0dp”和layout_weight =“1”代替。像这样:
<ListView
android:id="@+id/block_list"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:scrollbars="vertical" >
</ListView>