35

如何为可以显示在任何其他应用程序上的应用程序实现弹出覆盖。

Facebook 在其新的 Facebook Messenger 版本中实现了一个非常相似的功能,称为 Chatheads。我真的很惊讶地看到这是有可能的。在图像上,您会在另一个应用程序上看到一个聊天头(右侧的狗)。

Facebook Messenger 的 Chathead 优于其他应用程序

4

5 回答 5

7

完整的源代码在这里:http ://www.piwai.info/chatheads-basics
注意:你需要<uses-permission android:name="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);
  }
}
于 2015-06-20T06:54:04.887 回答
4

是浮动“聊天头”样式覆盖的最小、简单和通用示例。

它使用以下代码使事物浮动:

windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
chatHead = new ImageView(this);
chatHead.setImageResource(R.drawable.floating);
final 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);

完整的源代码可以在这里找到(在 Apache 许可下)。

于 2014-08-13T21:58:21.513 回答
2

我知道发布答案已经很晚了,无论如何我都会将其发布给正在寻求答案的其他人

Android浮动图像

于 2014-09-28T03:36:27.070 回答
2

如果您想要类似 Messenger 的行为,则有一个库:Bubbles

如果您更喜欢自己实现它,请按照其他人的建议查看窗口管理器。您还可以查看Bubbles的源代码以获得灵感。

于 2015-07-12T08:24:00.907 回答
0

每个 Activity、对话框和服务都附有一个窗口。Facebook 保持服务在后台运行,并在他们获取窗口管理器对象的服务中

windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

添加视图时创建所需的布局参数

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);

现在通过以下方法将您的视图添加到窗口管理器

windowManager.addView(yourView, params);
于 2015-07-23T11:17:29.670 回答