ListView隐藏EditText

时间:2012-08-08 12:10:41

标签: android

我是Android新手,正在阅读Wrox的专业android 4 app开发书。在本书的第4章中,它解释了如何修改现有的文本视图。我面临的问题是我的应用程序中的列表视图隐藏了编辑文本框。它隐藏(可以在后台看到),但仍然有效,可以通过它添加更多的东西。下面是我的主要活动xml的代码

<?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:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<EditText
    android:id="@+id/myEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:contentDescription="@string/addItemContentDescription"
    android:hint="@string/addItemHint"
    />
<ListView
    android:id="@+id/myListView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
</RelativeLayout>

和我的todolist_item xml

<?xml version="1.0" encoding="utf-8"?>
<com.example.wroxexample.ToDoListItemView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" 
android:padding="10dp"
android:scrollbars="vertical"
android:textColor="@color/notepad_text"
android:fadingEdge="vertical"
/>

4 个答案:

答案 0 :(得分:3)

第一个选项是使用LinearLayout而不是RelativeLayout

<?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:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<EditText
    android:id="@+id/myEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:contentDescription="@string/addItemContentDescription"
    android:hint="@string/addItemHint"
    />
<ListView
    android:id="@+id/myListView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
</LinearLayout>

RelativeLayout允许您相对于其他元素定位元素。

另一方面,LinearLayout将按照它们在xml文件中出现的顺序将元素一个放在另一个下面。

第二个选项是保留RelativeLayout并将以下标记添加到ListView中:

android:layout_below="@id/myEditText"

这会将ListView定位在EditText下面。

答案 1 :(得分:2)

试试这个:

<?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:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<EditText
    android:id="@+id/myEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:contentDescription="@string/addItemContentDescription"
    android:hint="@string/addItemHint"
    android:layout_alignParentTop="true"
    />
<ListView
    android:id="@+id/myListView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/myEditText"/>
</RelativeLayout>

答案 2 :(得分:2)

蒂莫西在我之前到达那里但生病只是加了一点。 正如他所说,你可以使用线性布局,或者如用户1387035所说,你可以将listview设置为在editText下面。

相对布局意味着“我想把东西放在相对的位置”,如果你不告诉他们要去哪里,他们就会漂浮到“重力”拉动它们的地方。默认的重力是最高的 - 所以我猜你的物品最后都是在左上方聚集的?

根据经验 - 您是否希望您的物品一个接一个地聚集在一起(水平或垂直)?如果是,则使用线性布局。如果要将它们推向不同的方向,请使用相对布局。有一些例外,通常涉及您可以在linearlayout中设置的“weight”属性。 (这是我刚刚使用的一个:http://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/

如果您有一个相对布局并且只使用layout_below / above属性,没有设置任何'alignParentBottom'或其他东西,那么您可能只想要一个linearlayout

在你的情况下,我会说这听起来像你想要Timothee的解决方案。如果你想在对象之间稍微分开,可以使用填充/边距来稍微分开它们。

至于重力,这是一个有用的博客条目,帮助我了解LinearLayout的重力(以及一般):http://sandipchitale.blogspot.co.uk/2010/05/linearlayout-gravity-and-layoutgravity.html

答案 3 :(得分:2)

使用LinearLayout和属性android:layout_weight http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html

尝试这样的事情:

<?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:orientation="vertical"
   android:layout_width="match_parent"
   android:layout_height="match_parent" >
   <ListView
    android:id="@+id/myListView"
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_weight="1"
    android:entries="@array/testea"
    android:layout_height="wrap_content"/>
<EditText
    android:id="@+id/myEditText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:contentDescription="@string/addItemContentDescription"
    android:hint="@string/addItemHint"
    />

</LinearLayout>

这样ListView将增长到只填充未使用的空间。