Как реализовать всплывающее оверлей, которое можно отобразить на любом другом приложении в Android
Как я могу реализовать всплывающее оверлей для приложения, которое может отображаться через любое другое приложение.
Facebook реализовал очень похожую функцию под названием Chatheads в новой версии Facebook Messenger. Я был очень удивлен, увидев, что это возможно. На изображении вы видите чат (собаку справа) над другим приложением.
![Facebook Messanger's Chathead over other app]()
Ответы
Ответ 1
Полный исходный код находится здесь: 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);
}
}
Ответ 2
Это - это минимальный, простой и общий пример плавающей надстройки "chathead".
Он использует следующий код, чтобы сделать вещи 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);
Полный источник источника можно найти здесь (по лицензии Apache).
Ответ 3
Я знаю, что поздно, чтобы опубликовать ответ, я все равно отправлю его другим людям, которые ищут ответ
AndroidFloatingImage
Ответ 4
Там есть библиотека для этого, если вы хотите, чтобы поведение Messenger было таким: Bubbles.
Если вы предпочитаете реализовать его, посмотрите на Window Manager, как предлагают другие. Вы можете также взглянуть на исходный код Bubbles, чтобы получить вдохновение.
Ответ 5
Каждое действие, диалог, а также сервис привязаны к окну. 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);