zoukankan      html  css  js  c++  java
  • 安卓Dialog setCanceledOnTouchOutside(ture) 无效问题

    今天写了一个自定义Dialog,界面逻辑肯定是有触碰外面需要消失掉的,然后就试试用setCanceledOnTouchOutside(ture),根据字面意思是对的哈,但是无效,网上有人说要放show() 后面,然后我试了无效-_-

    这里强调,要看源码!!!

    其实我也没看,我大概猜出是怎么回事了

    首先,我是自定义mDialog 继承 Dialog,通过setContentView()加载自定义布局,

    其次,在我的自定义布局里面最外层是固定大小的,如下代码

    <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="296dp"
        android:layout_height="290dp"
        android:background="#00000000"
        android:layout_gravity="center"
        >
    

     逻辑代码很简单如下:

    final UpdateDialog dialog = new UpdateDialog(this);
    //
    dialog.setCanceledOnTouchOutside(true);
    dialog.show();
    

     这样点击外面没有消失的原因是(重点来了)这个布局虽然是固定296和290但是整个 window 还是通过Activity 获取,是全屏的!!!所以就没有 outside 可以让你点击了!!

    所以解决办法有两种,一种是改布局,给这个296 &290 线性布局再嵌套个最外层match_parent 的布局,然后给点击事件回调给Activity处理

    第二种是:

    final WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
    params.width = 600;
    params.height = 800; 
    dialog.getWindow().setAttributes(params);
    dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
    

     这样就该了 window 大小了,可以点击到outside了

    over,谢谢

  • 相关阅读:
    Angular语法(三)——数据绑定
    Angular语法(二)——模板语法
    Angular语法(一)——展示数据
    Angular常用指令
    windows下启动redis
    WPF实现弹幕
    微信获得用户信息
    拉普拉斯变换
    Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering
    Python之并行
  • 原文地址:https://www.cnblogs.com/linwen5723/p/11577603.html
Copyright © 2011-2022 走看看