美文网首页
自定义Dialog之旅程(一)初试

自定义Dialog之旅程(一)初试

作者: 键盘上的麒麟臂 | 来源:发表于2017-07-13 09:14 被阅读78次

    看到美图上一些dialog华丽丽的效果之后,我也想装装逼,但是自定义dialog的文章不是很多,所以我也只能以一种摸索的形式来写这篇文章。
    首先看了网上写的几篇,在继承了dialog之后就重写了onCreate方法,于是这里我们需要先抛出一个问题
    dialog的生命周期是怎样的?知道这个东西的生命周期的话,对这个组件的使用就得心应手了,先把这个问题留到后面
    我们写照着别人的来重写onCreate方法

    Paste_Image.png Paste_Image.png

    第二句是我封装的类,不用管它,这里就一句setContentView()方法。
    结果效果是这样的。

    Paste_Image.png

    我的父布局是设置满屏的,而且现在点旁边也不会消失。

    从这步操作中我们可以看出两个重点:
    1、dialog本身设置布局与窗口之间存在一定距离
    2、默认情况下布局会显示白色

    二、既然布局是白色,太丑了,我们设置成布局背景透明色看看是什么效果

    Paste_Image.png

    图不贴了,就是上面那张,发现设置父布局的背景并没有什么卵用

    那就换个方法,按照网上的做法贴上这句

           getWindow().setBackgroundDrawableResource(android.R.color.transparent);   
    
    Paste_Image.png

    发现确实有效果,这一步说明了两点:
    1、把空白变透明没必要像一些网上说的设置主题
    2、设置父布局背景透明没用,要设置窗口透明才行

    三、结束
    其实说到这里就可以结束了,因为美团的效果已经出来了
    ,图中两个控件都是imageview,你只要换个好看的图,然后给按钮设置点击事件,好,大功告成。

    四、开个玩笑,结束这么快我还写毛啊
    虽然上面能实现我们想要的结果,但是点击附近时,弹框并不会消失,如果我们想要做点击旁边弹框消失的效果呢。

    先按照别人的做法

    Paste_Image.png

    dismiss()就是消失,用过dialog的知道,但是按照这样的做法会出现一个效果,不管点击哪里都会消失。
    其实这里应该是可以设置的,onTouchEvent是事件分发。

    但是这样做就太麻烦了,换一种做法
    textDialog.setCanceledOnTouchOutside(true);
    发现这样子并没有用

    好吧,目前没找到办法,要下班了,这个问题留到后面说。其实不实现点击周围消失的效果也行,因为这个地方本来就有一个叉的按钮让你点击,所以没必要再设置点击周围消失。

    其实发现设置 setFinishOnTouchOutside(true);是可以消失的,只是看第一步,点外围会消失,但是点之前是空白的那个地方就不会消失。

    相关文章

      网友评论

          本文标题:自定义Dialog之旅程(一)初试

          本文链接:https://www.haomeiwen.com/subject/lvbhnttx.html