1

我是 Android 新手,正在阅读 Wrox 的专业 android 4 应用程序开发书。在本书的第 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

4 回答 4

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 下方。

于 2012-08-08T12:17:30.560 回答
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>
于 2012-08-08T12:22:04.797 回答
2

蒂莫西比我先到了那里,但我只是多加一点。正如他所说,您可以使用线性布局,或者正如 user1387035 所说,您可以将列表视图设置为位于 editText 下方。

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

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

如果您有一个相对布局并且只使用 layout_below/above 属性,没有任何“alignParentBottom”或其他设置,那么您可能只需要一个线性布局

在你的情况下,我会说你想要蒂莫西的解决方案。如果您想在对象之间稍微分开,可以使用填充/边距将它们分开一点。

至于重力,这里有一篇有用的博客文章,它帮助我了解了 LinearLayout 的重力(以及一般性):http://sandipchitale.blogspot.co.uk/2010/05/linearlayout-gravity-and-layoutgravity。 html

于 2012-08-08T12:27:09.770 回答
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 将增长到仅填充未使用的空间。

于 2012-08-08T12:27:25.877 回答