Activity弹出技巧以及间距难消除bug之方案篇

523 查看

前言:

今天给大家带来的是关于一个Activity如何弹出的技巧,还是延续一贯的实用性风格,写本文的出发点为了帮助更多IT同僚少走弯路(PS:昨晚为解决这个Activity完美弹出问题,折腾到深夜=.=#)

正文:

本文解决的情景环境为:大家经常会遇到app中要求各种分享到微信,QQ的需求,我们需要从底部弹出一个类似这样的效果

注意看到这里你可能会说这很简单啊,用Popwindow就能搞定。但是我今天要讲的做法是用Activity来实现此效果,为什么不用Popwindow原因很简单,因为我app里面很多地方用到分享,所以作为一名爱好Java重构,复用的Android攻城狮,我是完全不想每个用到分享的界面都写上Popwindow然后在里面在写一堆分享的配置,如此鸡肋!
Activity来实现替代分享Popwindw的好处就是我只要写一个ShareActivity即可,需要调用分享的界面只要像启动普通Activity一样即可完美实现分享效果,简单好用!
如:

BUG来了

既然是用Activity来实现你必然会想到修改Activitydialog主题,那么你会得到这样

还有这样

中间弹出的就是没有任何处理的普通android:theme=“android:Theme.Dialog”Activity。所以他显示的位置默认就在中间,那么我想要把它显示在底部,可以在ShareActivity里面

这样设置,那么你看到的位置就会在底部,不过不要高兴的太早,到处是坑,会发现这个ShareActivity的显示效果会距离左,右,底部10dp左右,有强迫症的人八成已经皮痒了。我后来去查看了主题的源码,发现android:Theme.Dialog里面有这么一段

就是这几个参数,我想通过继承android:Theme.Dialog修改覆盖这几个值,都无果。后来我放弃了这样的做法,舍弃这个主题。
我自己写了一个themestyle

这个时候,你再OnCreate的时候写getWindow().setGravity(Gravity.BOTTOM);,你会发现已经完全贴合屏幕底部了,但是还有左右两边还有10dp的间距,真是醉了,最终我找到了一个好办法,这样:

恭喜终于实现了我想要的效果,这个时候为了追求UI灵动性,我在自己的themestyle中加入了<item name="android:windowAnimationStyle">@style/dialog_animation</item>,这个动画就是模仿从底部弹出渐变的动画效果,动画的xml我也列出来

终于完美版诞生!来之不易,血泪史的经验。

总结

Android里面一样的效果有N种实现方式,不要满足单一古板的做法,也许效果都能达到,但是我们需要尝试,创新,这样代码才会越来越优雅。一起越来越强吧!fighting!