我是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"
/>
答案 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将增长到只填充未使用的空间。