view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
//Dismiss the dialog
}
return false;
}
});
view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
//Create the dialog
return true;
}
});
Use setOnLongClickListener for creating the dialog and use setOnTouchListener for dismissing the dialog.
So you should add setOnTouchListener to the view. Call dialog.dismiss() when MotionEvent action is MotionEvent.ACTION_UP (user lifts his finger).
If the view is inside a scroll view the views onTouchListener does not get called. A simple solution is to add an onTouchListener to the scroll view and dismiss the dialog when user lifts his finger.
scrollView.setOnTouchListener( new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
//Dismiss the dialog
return true;
}
return false;
}
});
CLICK HERE to find out more related problems solutions.