您是否曾经签出Facebook应用程序?
当您单击顶部的“通知”按钮时,该应用程序会创建一个漂亮的覆盖窗口,其中包含所有信息的滚动列表视图。
它不会使背景变暗,如果您单击屏幕上不在重叠窗口本身中的任何位置,它也会消失。
覆盖层是向UI添加一些修饰的好主意。
前几天,我开始尝试弄清楚Facebook如何做到这一点。
重现这种类型的叠加层的一种好方法是实际使用“透明活动”。
您可以在Android清单中定义透明活动,如下所示:
<activity
Android:name=".OverlayActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
这给您一个空的活动。
因此,当启动此活动时,看起来好像什么都没有发生,并且用户无法再单击上一个活动中的UI元素。
现在我们有了一个活动,可以看到最后一个活动的背景,我们需要以XML设计自身的叠加层。
在Facebook的情况下,这将是ListView和矩形图形。
布局也需要正确定位。
请注意,在上面的Facebook图像中,图像的放置方式是使矩形指针位于激活它的按钮的正下方。
使用此实现的好处在于,叠加层的功能完全隔离,因为它位于新活动中。
在OverlayActivity中,我们仅生成列表并为列表设置点击处理程序。
要获得Facebook添加的所有功能,还剩下一些技巧。
要在单击叠加层之外的任何区域时使叠加层消失,需要在叠加层的布局中完成一些工作。
这涉及设置一个单击处理程序,以覆盖叠加层的可见小部件未使用的所有区域。
通过在根布局中设置点击处理程序,以关闭点击活动,我们便有了所需的功能。
这在Android中效果很好,因为在其他视图上设置的任何单击处理程序(在Facebook的情况下为ListView)都将覆盖根目录的单击处理程序。
要比Facebook的实现高出一步,可以添加动画以提供显示和移除叠加层的过渡。
例如,我们可以轻松地添加淡入和淡出动画,从而使叠加看起来更加清晰。
由于我们有一个活动,因此很容易将任何类型的动画添加到叠加层中。
为了获得有趣的动画效果,请查看Android中的Alpha动画 。
翻译自: https://www.javacodegeeks.com/2012/05/android-facebooks-notification-widget.html