zoukankan      html  css  js  c++  java
  • [Android]对话框样式Activity获得窗口外点击事件

      Dialog除了使用Dialog类来实现之外,还可以使用Dialog样式的Activity来实现,只需要在注册Activity时指明theme为adnroid:Theme.Dialog就行,这样的Dialog因为实际上是个Activity而更加丰富灵活。在API11(如果没记错的话)之前的dialog样式Activity是模式的,点击对话框外部对话框不会消失,而API11之后虽然依然是模式的,但点击对话框外部后对话框消失,相当于点击了返回键。

      如何人为控制点击对话框(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 APP自动化测试之环境配置以及脚本设计(课工场)
    第一节:Appium介绍(课工场)
    Dockerfile 相关命令
    Nginx 原理及与 Apache 对比
    Windows 环境配置 Nginx
    Linux 命令大全(十九)——性能优化及常见问题
    Linux 命令大全(十八)——压缩打包
    Linux 命令大全(十七)——VI/VIM编辑器
    Linux 命令大全(十六)——计划任务
    Linux 命令大全(十五)——配置文件
  • 原文地址:https://www.cnblogs.com/lcyty/p/3426946.html
Copyright © 2011-2022 走看看