• 9
name

A PHP Error was encountered

Severity: Notice

Message: Undefined index: userid

Filename: views/question.php

Line Number: 191

Backtrace:

File: /home/prodcxja/public_html/questions/application/views/question.php
Line: 191
Function: _error_handler

File: /home/prodcxja/public_html/questions/application/controllers/Questions.php
Line: 433
Function: view

File: /home/prodcxja/public_html/questions/index.php
Line: 315
Function: require_once

How can I implement a popup overlay for an app that can be displayed over any other app.

Facebook implemented a very similar feature called Chatheads in its new Facebook Messanger version. I was really surprised to see that this is some how possible. On the image, you see a chathead (dog on the right) over another app.

Facebook Messanger's Chathead over other app

      • 2
    • I think this is a legitimate question. It might be poorly stated for some people. Rephrase the question so that it focuses more on the screen popup overlays on any app rather than Facebook Messenger itself, attribute it as your example. Screenshot also is nice to give context.
      • 2
    • Have a look at the Facebook Messanger comments on Google Play. For some people it doesn't work, it may have something to do with all those TouchWizzes and HTC Senses...
      • 1
    • As I said before I believe this question is legitimate. Any of the users that closed this question should really explain why it was closed. There is no communication here.

Full source code is here: http://www.piwai.info/chatheads-basics
Note: You will need <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);
  }
}
  • 7
Reply Report

This is a minimal, simple, and general example of a floating "chathead"-style overlay.

It uses the following code to make things float:

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

The full source source can be found here (under the Apache license).

  • 4
Reply Report
      • 1
    • TYPE_PHONE is now deprecated and throws WindowManager$BadTokenException ... permission denied for window type 2002 on api 28>

Every Activity, dialog as well as service is attached with a window. Facebook keeps a service running in background and in the service they fetch window manager object by

windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

Create Layout Params needed while adding your view

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

now add your view to window manager by following method

windowManager.addView(yourView, params);
  • 0
Reply Report
      • 2
    • TYPE_PHONE is now deprecated and throws WindowManager$BadTokenException ... permission denied for window type 2002 on api 28>