[Android]对话框样式Activity获得窗口外点击事件
2013-11-16 16:56
351 查看
Dialog除了使用Dialog类来实现之外,还可以使用Dialog样式的Activity来实现,只需要在注册Activity时指明theme为adnroid:Theme.Dialog就行,这样的Dialog因为实际上是个Activity而更加丰富灵活。在API11(如果没记错的话)之前的dialog样式Activity是模式的,点击对话框外部对话框不会消失,而API11之后虽然依然是模式的,但点击对话框外部后对话框消失,相当于点击了返回键。
如何人为控制点击对话框(Activity)外部时窗口是否销毁呢?在API11之后添加了setFinishOnTouchOutside()方法,只需要在onCreate()方法中调用:
就可以设置点击对话框外部是否消失,但API11之前没有这个方法,也就是说API11之前没有现成的方法能够实现点击dialog样式Activity外部对话框消失,所以真正监听这个点击事件才是根本解决方法。
Stackoverflow上有人给出了一种非常有效的思路。首先在View创建之前设置两个Flag,一个设置窗口为非模式的,这样除窗口外的内容就可以获得touch事件,然后设置窗口外部touch事件发生时的通知。最后重写onTouchEvent,监听窗口外的Touch事件。这样就可以在监听方法中自定义窗口外点击事件的响应,是否关闭窗口或者其他操作。
如何人为控制点击对话框(Activity)外部时窗口是否销毁呢?在API11之后添加了setFinishOnTouchOutside()方法,只需要在onCreate()方法中调用:
this.setFinishOnTouchOutside(false);
就可以设置点击对话框外部是否消失,但API11之前没有这个方法,也就是说API11之前没有现成的方法能够实现点击dialog样式Activity外部对话框消失,所以真正监听这个点击事件才是根本解决方法。
Stackoverflow上有人给出了一种非常有效的思路。首先在View创建之前设置两个Flag,一个设置窗口为非模式的,这样除窗口外的内容就可以获得touch事件,然后设置窗口外部touch事件发生时的通知。最后重写onTouchEvent,监听窗口外的Touch事件。这样就可以在监听方法中自定义窗口外点击事件的响应,是否关闭窗口或者其他操作。
public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Make us non-modal, so that others can receive touch events. getWindow().setFlags(LayoutParams.FLAG_NOT_TOUCH_MODAL, LayoutParams.FLAG_NOT_TOUCH_MODAL); // ...but notify us that it happened. getWindow().setFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH); // Note that flag changes must happen *before* the content view is set. setContentView(R.layout.my_dialog_view); } @Override public boolean onTouchEvent(MotionEvent event) { // If we've received a touch notification that the user has touched // outside the app, finish the activity. if (MotionEvent.ACTION_OUTSIDE == event.getAction()) { finish(); return true; } // Delegate everything else to Activity. return super.onTouchEvent(event); } }
相关文章推荐
- [Android]对话框样式Activity获得窗口外点击事件
- [Android]对话框样式Activity获得窗口外点击事件
- 对话框样式Activity获得窗口外点击事件
- Activity对话框样式. 点击空白区域关闭窗口
- 封装好的Android对话框Dialog,包含了丰富的dialog样式、点击事件数据回传接口。直接调用封装好的方法即可操作dialog
- Android Activity对话框(窗口)样式设置
- Android使用ListView构造复杂界面,响应点击事件,通过Intent跳转activity
- Android自定义alertDialog和对话框中的点击事件
- Android 横屏启动activity,点击屏幕的单击、双击和长按事件
- 自定义菜单时点击Menu后,自定义菜单显示,但是activity窗口没获得焦点。为什么?
- Android ListView/ListActivity点击长按事件
- Android深入探究笔记之二 -- 打开一个新的 Activity 并传递参数与如何响应控件的点击事件 .
- Android 组件学习笔记(activity跳转,接口实现的点击事件)
- Android webview监听网页对话框点击事件
- Android深入探究笔记之二 -- 打开一个新的 Activity 并传递参数与如何响应控件的点击事件
- android 语言国际化 + 点击按钮出现menu + 点击menu出现dialog对话框 + radiobutton 点击事件
- 对话框样式的Activity 和 重复点击view
- Android Activity使用Dialog样式导致点击空白处自动关闭的问题解决
- 响应Android按钮点击事件并且弹出多个对话框的解决办法
- Android类似微博弹出窗口效果并且点击事件