Activity使用Dialog样式导致点击空白处自动关闭的问题

将Activity设置成窗口的样式实现Dialog或者Popupwindow效果在开发中是很常用的一种方式,在AndroidMenifest.xml中将需要设置的Activity增加android:theme="@android:style/Theme.Dialog"属性即可。但是窗口化的Activity有个问题就是:点击窗口空白处Activity会finish。如何避免这个问题呢,办法如下:

一、如果API Level>=11有两种方式:

1、

res\values\styles.xml

<resources>
    <style name="Theme.SoundRecorder" parent="@android:style/Theme.Holo.DialogWhenLarge">
        <item name="android:windowCloseOnTouchOutside">false</item>
    </style>
</resources>

2,

YourActivity.this.setFinishOnTouchOutside(false); 

二、如果API Level<11

@Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN && isOutOfBounds(this, event)) {
            return true;
        }
        return super.onTouchEvent(event);
    }

    private boolean isOutOfBounds(Activity context, MotionEvent event) {
        final int x = (int) event.getX();
        final int y = (int) event.getY();
        final int slop = ViewConfiguration.get(context).getScaledWindowTouchSlop();
        final View decorView = context.getWindow().getDecorView();
        return (x < -slop) || (y < -slop)|| (x > (decorView.getWidth() + slop))|| (y > (decorView.getHeight() + slop));
    }
时间: 2024-10-07 19:15:49

Activity使用Dialog样式导致点击空白处自动关闭的问题的相关文章

【Android】 activity的dialog样式

<!-- activity无黑边 --> <!-- activity可滑动 --> <!-- activity透明 --> <!-- activity无标题 --> <!-- activity不变暗 --> <style name="dialog" parent="@android:style/Theme.Dialog"> <item name="android:windowFr

给Activity设置Dialog属性,点击区域外消失;

1.在AndroidManifest.xml中给Activity设置样式: <activity android:name=".MyActivity" android:theme="@style/MyDialog" android:label="@string/app_name" > 2.在res-value-style.xml中设置dialog样式: <?xml version="1.0" encoding=

自制WheelView沉浸式菜单及Dialog样式Activity

自制一个简单的WheelView控件,配合Dialog样式的Activity使用 为什么不直接用Dialog呢? 因为感觉Dialog有时候传值会很麻烦,而且写起来也不方便.用Activity仿的话就很方便,效果也不错. 当然用Dialog也是可以的,具体根据项目需求和个人习惯而定. 效果图如下: 那么直接贴核心代码,源码我会在博客底部发链接 Dialog样式的Activity布局: <?xml version="1.0" encoding="utf-8"?&

自制WheelView沉浸式菜单及Dialog样式Activit

本文为 兄弟连IT教育 机构官方 主要介绍:自制WheelView沉浸式菜单及Dialog样式Activit 自制一个简单的WheelView控件,配合Dialog样式的Activity使用 为什么不直接用Dialog呢? 因为感觉Dialog有时候传值会很麻烦,而且写起来也不方便.用Activity仿的话就很方便,效果也不错. 当然用Dialog也是可以的,具体根据项目需求和个人习惯而定. 效果图如下: 那么直接贴核心代码,源码我会在博客底部发链接 Dialog样式的Activity布局: 1

Dialog样式的Activity

效果图: 设置全屏模式: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.loginoutinfo_activity); getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); } 必须在setContent

Android应用Activity、Dialog、PopWindow窗口显示机制及源码分析

[工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重劳动成果] 1 背景 之所以写这一篇博客的原因是因为之前有写过一篇<Android应用setContentView与LayoutInflater加载解析机制源码分析>,然后有人在文章下面评论和微博私信中问我关于Android应用Dialog.PopWindow.Toast加载显示机制是咋回事,所以我就写一篇文章来分析分析吧(本文以Android5.1.1 (API 22)源码为基础分析),以便大家在应

Android应用Activity、Dialog、PopWindow、Toast窗体加入机制及源代码分析

[工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重劳动成果] 1 背景 之所以写这一篇博客的原因是由于之前有写过一篇<Android应用setContentView与LayoutInflater载入解析机制源代码分析>.然后有人在文章以下评论和微博私信中问我关于Android应用Activity.Dialog.PopWindow载入显示机制是咋回事,所以我就写一篇文章来分析分析吧(本文以Android5.1.1 (API 22)源代码为基础分析),以

WindowManager--Toast、activity、dialog的实际渲染者

刚刚利用WindowManager写了个对话框,如下图.WindowManager是视图实际的渲染者,Toast.activity.dialog都是通过它进行显示的.利用它我们可以很容易的实现诸如:立体UI.悬浮效果.引导页中的app使用说明等等. WindowManager是Android中一个重要的服务(Service ).WindowManager Service 是全局的,是唯一的.它将用户的操作,翻译成为指令,发送给呈现在界面上的各个Window.Activity会将顶级的控件注册到

自定义dialog样式,自动弹出软件盘

开发中android自带dialog样式有时候不能满足我们的需求,这时候就需要自定义样式了,调用dialog的setView方法可以自定义布局,代码如下 final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); View alertDialogView = View.inflate(context, R.layout.comment_input_layout, null); final Ale