我在ListView
内有一个RelativeLayout
,而EditText
的小型LinearLayouot应该悬停在列表上方。但是,当我点击EditText
时,它会在下面的ListView
上注册一次点击。这似乎是一个焦点问题。
这是代码:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/llSearchPlaces"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:background="#dedede"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true" >
<EditText
android:id="@+id/etSearchPlaces"
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginTop="2dp"
android:hint="Search for Places"
android:inputType="textCapWords" />
</LinearLayout>
<ListView
android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:listSelector="@drawable/nav_selector" >
</ListView>
</RelativeLayout>
它希望焦点在id llSearchPlaces
上。但是我设置的两个焦点属性不起作用。
答案 0 :(得分:1)
尝试重新排序XML布局中的视图。忽略其他视图/视图组:
<RelativeLayout ...>
<ListView .../>
<EditText .../>
</RelativeLayout>
原因是ViewGroups倾向于按照描述的顺序绘制他们的孩子,并以相反的顺序向下传递触摸事件,因此在顶部绘制的视图有机会首先对触摸进行操作。如果您按照我的描述在XML中订购它们,EditText会稍后(在ListView之上)绘制,并且会在ListView之前接收触摸事件。
答案 1 :(得分:0)
试试这个:
首先:为listview创建布局xml,例如listview.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:listSelector="@drawable/nav_selector"
android:paddingBottom="50dp" >
</ListView>
</LinearLayout>
第二步:为编辑文本创建布局xml,例如edittext.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<EditText
android:id="@+id/etSearchPlaces"
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginTop="2dp"
android:hint="Search for Places"
android:inputType="textCapWords" />
<requestFocus />
</LinearLayout>
第三:在布局中合并这两个布局,例如mainlayout.xml
<merge xmlns:android="http://schemas.android.com/apk/res/android" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<include
android:layout_alignParentTop="true"
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
layout="@layout/listview"/>
<include
android:layout_alignTop="@+id/lv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
layout="@layout/edittext"/>
</RelativeLayout>
注意:将id和其他属性替换为你的......
答案 2 :(得分:0)
第二眼看,我不明白为什么你需要一个RelativeLayout
。您实现的效果比EditText
低ListView
。实际上,ListView
和EditText
重叠,您正在解决此问题,方法是让底部的ListView
填充等于EditText
容器的高度。< / p>
更好的选择是使用垂直LinearLayout
在其下方包含ListView
和EditText
容器。这里ListView
将占用EditText
容器未使用的所有可用空间。
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
... />
<LinearLayout
android:id="@+id/llSearchPlaces"
android:layout_width="match_parent"
android:layout_height="..."
android:orientation="horizontal"
... >
</LinearLayout>
</LinearLayout>