我已经为我的应用程序实现了一个自定义对话框。我希望在用户单击对话框外部时,对话框会被关闭。 我需要做什么才能实现这一功能?
我已经为我的应用程序实现了一个自定义对话框。我希望在用户单击对话框外部时,对话框会被关闭。 我需要做什么才能实现这一功能?
从您的活动/片段中调用 dialog.setCancelable(false);
。
您可以使一个占据整个屏幕大小的背景
变为透明
,并监听onClick
事件以dismiss
它。
我尝试了一些答案,但仍然遇到了一个问题,就是当我点击对话框外部时,对话框会隐藏,但是一个暗淡的视图仍然显示着,再次点击会回到父活动。但实际上,我想在第一次点击后就返回到父活动。 所以我做的是
dialog.setOnCancelListener(this);
并将我的活动更改为实现DialogInterface.OnCancelListener
@Override
public void onCancel(DialogInterface dialog) {
finish();
}
然后,它就奏效了。
这里是代码
dialog.getWindow().getDecorView().setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent ev) {
if(MotionEvent.ACTION_DOWN == ev.getAction())
{
Rect dialogBounds = new Rect();
dialog. getWindow().getDecorView().getHitRect(dialogBounds);
if (!dialogBounds.contains((int) ev.getX(), (int) ev.getY())) {
// You have clicked the grey area
UiUtils.hideKeyboard2(getActivity());
return false; // stop activity closing
}
}
getActivity().dispatchTouchEvent(ev);
return false;
}
});
试试这个。当你点击外部时,可以隐藏键盘。