Android解决Dialog触碰外面不能自动关闭问题

这篇具有很好参考价值的文章主要介绍了Android解决Dialog触碰外面不能自动关闭问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android解决Dialog触碰外面不能自动关闭问题,其实也就是解决dialog.setCanceledOnTouchOutside(true) 不生效问题

为什么设置了dialog.setCanceledOnTouchOutside(true) 会不生效呢?

问题根源在styles文件中定义android:windowIsFloating=false导致:

    <!-- 底部弹出日期选择窗口Dialog样式. -->
    <style name="BottomDialog" parent="Theme.AppCompat.Dialog">
        
        <item name="android:windowIsFloating">false</item>
    </style>

android:windowIsFloating 表示Dialog是否浮现在activity之上,
当将windowIsFloating设置为false时对话框默认将使用全屏.因此没有外部区域可以点击取消,导致setCanceledOnTouchOutside(true)会失效
当将windowIsFloating设置为true时,触碰dialog区域外可以自动关闭,但是match_parent属性无效,不会自动扩展宽度以填充屏幕,  这将导致contentView总是将内容包装成尽可能小的内容。
所以:这里 建议将其设置为false后手动将Dialog窗口布局更新为MATCH_PARENT 问题即可解决

定义一个java方法:  
    //解决dialog.setCanceledOnTouchOutside(true) 不生效问题
    public void setDialogTouchOutsideCloseable(Dialog dialog, int gravity) {
        Window window = dialog.getWindow();
        WindowManager.LayoutParams params = window.getAttributes();
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
        window.setAttributes(params);
        window.setGravity(gravity);
    }

使用:

setDialogTouchOutsideCloseable(dialog,Gravity.BOTTOM);

作者原创文章,转载请注明出处!文章来源地址https://www.toymoban.com/news/detail-671565.html

到了这里,关于Android解决Dialog触碰外面不能自动关闭问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决 git 不能自动添加 index.tsx 的问题

    最近在写 React Native 项目,发现 index.tsx 总是无法添加到 git 中,需要根据路径强制 add,经过一番搜索,终于解决了这个问题,原来是因为 git 的全局 config 文件中自动添加了 index.tsx 文件。 输入 git config -l 其中有一条: 打开该文件,发现里面有一行: 删除即可。 如果不想修

    2024年02月16日
    浏览(28)
  • 解决‘selenium打开浏览器驱动后会自动关闭’的问题

    在学习的时候,遇到使用selenium打开浏览器驱动时,没有写关闭代码,浏览器也会自动关闭,导致在学习不是很方便,代码如下 关于这个情况,我找到了两个解决办法 第一:是因为selenium的版本过高,我原来使用的是4.3版本,把版本降到到3.0即可 卸载selenium:pip uninstall sele

    2024年04月17日
    浏览(42)
  • vue-pc端elementui-统一修改问题-Dialog 对话框点击空白关闭问题-element-所有组件层级问题

    实际开发我们经常发现dialog弹出框默认点击遮罩层空白地方就会关闭-有属性可以关闭 但是经常会图方便-或者已经写完了,不想一个个写,可以在main.js进行统一关闭 当我们在页面进行复杂设计和层级关闭改变,会发现右上角的退出登录弹出款在我们页面之下 这是我们不管怎

    2024年02月13日
    浏览(30)
  • Pycharm2023.2左右版本出现项目无法自动关闭的问题(真解决方法!)

    目录 1.问题描述及图片 2.网上辣子鸡解决方法简介 3.出现问题的原因以及真正可以解决的方法! 方法就是:关闭自动索引,直接采用本地索引,方法如图: 1.问题描述及图片         问题如上,在退出Pycharm时总是出现正在关闭项目的选项,且长时间无法关闭,需要打开任务

    2024年02月08日
    浏览(36)
  • 解决python+selenium自动化,打开谷哥浏览器窗口么会自动关闭问题

    # 导包 from selenium import webdriver from selenium.webdriver.common.by import By # 实例化浏览器,且浏览器对象的初始化放在定义的方法函数外,以全局变量的形式使用 wd = webdriver.Chrome() # 已配置环境变量 def get(): #

    2024年02月14日
    浏览(39)
  • Android Toast工具类 解决Toast不消失 解决非UI线程不能Toast的问题

    觉得有用,请  点赞  +  关注 ,您的支持是我最大的动力! 觉得有用,请  点赞  +  关注 ,您的支持是我最大的动力! 觉得有用,请  点赞  +  关注 ,您的支持是我最大的动力!

    2024年02月16日
    浏览(28)
  • python selenium框架解决ip代理框不能自动化登录,解决pyautogui开不了多线程问题

    有时候我们使用python自动化框架的时候,打开一个网页的时候,它会出现出线这一种登录框,我们f12检查不了,用开发者工具强制检查里面没有任何属性. 那这时候我们就可以用到python第三方库:pyautogui PyAutoGUI:是一个Python库,可用于自动化GUI(图形用户界面)程序的任务。它可以让

    2024年02月07日
    浏览(57)
  • 【Android】Dialog不显示的问题,涉及线程处理问题

    在逻辑处理的时候挂了一线程监听网络回调的数据,这样就不会卡在UI没有任何表现导致用户以为死机了。这样的处理方式也是常规的网络处理方式。 结我在成功回调中就简单构造一个dialog来弹出信息展示,结果debug发现明明走到了 create 和 show 方法中,但是就是没有出现在

    2024年02月06日
    浏览(24)
  • Android Dialog 显示不全的问题

    前言:开发的时候发现一些运行到手机里的dialog显示不全,只显示一半左右  问了下chatgpt发现没有任何头绪,于是开始自己慢慢分析 显示去掉了原有的dialog的style发现问题解决了,但在原有基础上如何解决呢? 先看看xml,发现设置了宽高都不起作用 使用LayoutInspector查看发现

    2024年01月23日
    浏览(50)
  • 解决苹果Safari 浏览器下html不能自动播放声音和视频的问题-实时语音通话功能【唯一客服】...

    在实现我的客服系统中,实时语音通话功能的时候,如果想自动播放音视频流,在苹果设备上遇到了问题。 苹果浏览器(Safari)在默认情况下不允许声音在背景里自动播放。这是出于用户体验和隐私方面的考虑,避免在用户没有意识到的情况下自动播放声音。 解决办法是 iOS

    2024年02月12日
    浏览(89)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包