Android使用什么API来创build聊天头?

Facebook如何在Android上创build聊天头? 什么是在所有其他视图之上创build浮动视图的API?

这一个:

允许应用程序使用typesTYPE_SYSTEM_ALERT打开窗口,显示在所有其他应用程序的顶部。 很less的应用程序应该使用此权限; 这些窗口用于与用户进行系统级的交互。

常量值:“android.permission.SYSTEM_ALERT_WINDOW”

//编辑:完整的代码在这里 :

public class ChatHeadService extends Service { private WindowManager windowManager; private ImageView chatHead; @Override public IBinder onBind(Intent intent) { // Not used return null; } @Override public void onCreate() { super.onCreate(); windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); chatHead = new ImageView(this); chatHead.setImageResource(R.drawable.android_head); WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); params.gravity = Gravity.TOP | Gravity.LEFT; params.x = 0; params.y = 100; windowManager.addView(chatHead, params); } @Override public void onDestroy() { super.onDestroy(); if (chatHead != null) windowManager.removeView(chatHead); } } 

不要忘记以某种方式启动服务:

 startService(new Intent(context, ChatHeadService.class)); 

..并将此服务添加到您的清单。

通常,Android活动是全屏幕,概念上专用的用户界面,可以进行所有的交互。 这有几个例外。 首先,popup对话框不填满屏幕。 另一个是Android的敬酒,这是一个非交互式的popup窗口 – 你不能触摸它,如果你尝试,它会去下面的任何东西。

你也可以做你自己的特殊用户界面。 您可以直接将视图添加到WindowManager ,指定一个types标志。 聊天头可能使用TYPE_PHONE 。 有一些类似的types,但目的是相同的:特殊目的叠加可以出现在其他任何东西的顶部,而不显示父应用程序。

尽pipe如此,这只会让你感到困惑,因为互动的问题。 首先,你的覆盖层将吸收所有的互动,所以不仅头部得到事件,而且阻止互动到下面的所有东西。

您可以使用LayoutParamsconfiguration此行为。 FLAG_NOT_TOUCH_MODAL表示显示区域以外的事件转到底层UI。 现在你会发现它的工作,但其他不好的事情仍然发生,如后/菜单button不被定向到应用程序,再加上没有键盘。 要解决这个问题,你需要FLAG_NOT_FOCUSABLE

你也会从不可调焦的位置获得副作用,这与你的覆盖层没有很好的相互作用,例如按下button。 虽然你可以得到一些基本的触摸事件,你可以一直做math,这可能足够的聊天头。 只要意识到,它会让你自己在很多领域,如UIanimation。

在这个StackOverflow线程中可以find一个很好的细节概述,包括允许select性的交互消耗。 特别是其中的一个答案链接最终会把你带到这里 ,这是一个很好的示例项目。 请注意,ICS改变了这一点,但线程解释说。

这是所有的公共API的东西,但它似乎不是一个当然应该做的主stream事情。 文档散布着对特殊系统应用程序行为的引用,并有充分的理由; 如果每个人都做了呢?

灵活的头部给出了基于弹簧的聊天头开箱即用的行为。 所有你必须定义的是聊天头的可绘图和点击聊天头后打开的片段。 聊天头在最小化时折叠,拖动时按住手指。

该项目包括演示应用程序,演示所有内置的function。 要使用它,你需要添加到你的gradle依赖。

 compile 'com.flipkart.springyheads:library:0.9.6'