看到美图上一些dialog华丽丽的效果之后,我也想装装逼,但是自定义dialog的文章不是很多,所以我也只能以一种摸索的形式来写这篇文章。
首先看了网上写的几篇,在继承了dialog之后就重写了onCreate方法,于是这里我们需要先抛出一个问题
dialog的生命周期是怎样的?知道这个东西的生命周期的话,对这个组件的使用就得心应手了,先把这个问题留到后面
我们写照着别人的来重写onCreate方法
第二句是我封装的类,不用管它,这里就一句setContentView()方法。
结果效果是这样的。
我的父布局是设置满屏的,而且现在点旁边也不会消失。
从这步操作中我们可以看出两个重点:
1、dialog本身设置布局与窗口之间存在一定距离
2、默认情况下布局会显示白色
二、既然布局是白色,太丑了,我们设置成布局背景透明色看看是什么效果
图不贴了,就是上面那张,发现设置父布局的背景并没有什么卵用
那就换个方法,按照网上的做法贴上这句
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
发现确实有效果,这一步说明了两点:
1、把空白变透明没必要像一些网上说的设置主题
2、设置父布局背景透明没用,要设置窗口透明才行
三、结束
其实说到这里就可以结束了,因为美团的效果已经出来了
,图中两个控件都是imageview,你只要换个好看的图,然后给按钮设置点击事件,好,大功告成。
四、开个玩笑,结束这么快我还写毛啊
虽然上面能实现我们想要的结果,但是点击附近时,弹框并不会消失,如果我们想要做点击旁边弹框消失的效果呢。
先按照别人的做法
dismiss()就是消失,用过dialog的知道,但是按照这样的做法会出现一个效果,不管点击哪里都会消失。
其实这里应该是可以设置的,onTouchEvent是事件分发。
但是这样做就太麻烦了,换一种做法
textDialog.setCanceledOnTouchOutside(true);
发现这样子并没有用
好吧,目前没找到办法,要下班了,这个问题留到后面说。其实不实现点击周围消失的效果也行,因为这个地方本来就有一个叉的按钮让你点击,所以没必要再设置点击周围消失。
其实发现设置 setFinishOnTouchOutside(true);是可以消失的,只是看第一步,点外围会消失,但是点之前是空白的那个地方就不会消失。