整个对话框的Android onTouchListener
我有一个对话框可以从中选择文件。此对话框包含用于显示目录和文件的列表视图,并具有用于导航的侦听器 我如何应对目录结构中出现的抛出事件?我尝试在根RelativeLayout上设置OnTouchListener,以将触摸事件发送到我的手势Listener:整个对话框的Android onTouchListener,android,dialog,gesture,gesturedetector,onfling,Android,Dialog,Gesture,Gesturedetector,Onfling,我有一个对话框可以从中选择文件。此对话框包含用于显示目录和文件的列表视图,并具有用于导航的侦听器 我如何应对目录结构中出现的抛出事件?我尝试在根RelativeLayout上设置OnTouchListener,以将触摸事件发送到我的手势Listener: final GestureDetector detector = new GestureDetector(new MyGestureDetector(tvCurrentPath)); dialog.findVi
final GestureDetector detector = new GestureDetector(new MyGestureDetector(tvCurrentPath));
dialog.findViewById(R.id.rlFilelist).setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View view, MotionEvent e) {
detector.onTouchEvent(e);
return false;
}
});
事件在onTouch()中注册,但在MyGestureDetector中从未调用onFling()方法。但是,如果我将OnTouchListener附加到listview,它将按预期工作。这种方法的问题是listview并不总是充满大量数据,当它为空或单击下面的项目时,不会触发onTouch()事件
对话框布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rlFilelist"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:focusable="true" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/llButtons" >
<TextView
android:id="@+id/tvCurrentPath"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip" >
</TextView>
<ListView
android:id="@+id/lvFileListing"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@id/llButtons"
android:layout_below="@id/tvCurrentPath" >
</ListView>
</RelativeLayout>
<RelativeLayout
android:id="@+id/llButtons"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="5dip"
android:layout_marginTop="5dip" >
<Button
android:id="@+id/btAddDirectory"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginRight="10px"
android:text="@string/host_tv_dg_add_directory" />
<Button
android:id="@+id/btUp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10px"
android:layout_toRightOf="@id/btAddDirectory"
android:text="@string/host_tv_dg_navigate_up" />
<Button
android:id="@+id/btClose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/btUp"
android:text="@string/_tv_close" />
</RelativeLayout>
</RelativeLayout>
未完全填充lisview的对话框的屏幕截图:
如何使onFling()事件在整个对话框或“整个”listview上触发,即使它没有完全填满项
谢谢大家! 您可以选择一个
活动
,并将清单中的主题
设置为对话框
然后将onTouchListener
实现到该活动
并在该活动中编写一个onTouch()
事件
现在您获得了整个对话框的触摸事件:)您应该创建一个扩展对话框类的类,然后您可以创建一个手势检测器并附加到该类的ontouchevent。 下面是一个代码示例:
public class GestureDialog extends Dialog {
public GestureDialog (Context context, int theme) {
super(context, theme);
gestDetec = new MyGestureDetector(); //inital setup
gestureDetector = new GestureDetector(gestDetec);
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
};
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event))
return true;
else
return false;
}
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
System.out.println( "Help im being touched!" );
return false;
}
}
}