【发布时间】:2012-02-29 08:13:46
【问题描述】:
我看过几篇关于如何通过单击外部来关闭对话框的帖子。但是有没有办法通过单击对话窗口内部来获得相同的功能?
是否有任何对话侦听器可以检测到对对话窗口的点击?
【问题讨论】:
标签: android dialog listener dismiss
我看过几篇关于如何通过单击外部来关闭对话框的帖子。但是有没有办法通过单击对话窗口内部来获得相同的功能?
是否有任何对话侦听器可以检测到对对话窗口的点击?
【问题讨论】:
标签: android dialog listener dismiss
覆盖Dialog.onTouchEvent(...) 可以捕获屏幕上任何位置的任何点击。通过点击任意位置来关闭对话框:
Dialog dialog = new Dialog(this) {
@Override
public boolean onTouchEvent(MotionEvent event) {
// Tap anywhere to close dialog.
this.dismiss();
return true;
}
};
这个 sn-p 取消了调用 dialogObject.setCanceledOnTouchOutside(true); 的需要。
【讨论】:
假设您想在对话框范围内的任何位置检测触摸事件。如果您正在创建自定义对话框(即将一组Views 组合成某种布局View,然后使用.setContentView() 将父View 设置为对话框的主要内容视图),那么也许您可以简单地为该内容父 View 设置一个 onTouch 侦听器。此外,您可以使用mDialog.findViewById() 来获取视图,例如,如果您使用的是AlertDialog,也许您可以通过某种方式确定使用什么资源ID 来获取其主要布局View。
【讨论】:
如果您的对话框中有一个布局,您可以将其作为视图引用,并在其上放置一个 onClickListener。因此,假设您的对话框具有自定义布局,并查看整个对话框,请获取对其的引用。
例如,假设一个对话框有一个名为 mainll 的 LinearLayout,其中包含您的自定义视图,您会:
LinearLayout ll - (LinearLayout) findViewById(R.id.mainll);
ll.setOnClickListener(...) { onClick()... }
然后任何时候在 LinearLayout 中点击任何东西,它都会注册一个点击事件。
【讨论】:
您始终可以创建自己的 Dialog 活动并在用户单击要关闭 Dialog 的区域时调用 finish()。
【讨论】:
这是一个示例,它解释了如何在对话框中处理 onTouch 事件。诀窍在于创建自定义侦听器。
http://about-android.blogspot.co.uk/2010/02/create-custom-dialog.html
【讨论】:
here i have taken my close icon ,if u need u can take anything like button
first of all u have implement to the class
class somethingclass Dialog implements View.OnClickListener
then set the event for particular
icon_close.setOnClickListener(this);
then override the class function
@Override
public void onClick(View v) {
if(R.id.icon_close==v.getId()){
dismiss();
}else
}
Note: if passible u can give dilaog.dismiss();
【讨论】: