Какие API в Android используются Facebook для создания чат-голов?

Как Facebook создает чат-головки на Android? Что такое API для создания плавающих видов поверх всех других видов?

Solutions Collecting From Web of "Какие API в Android используются Facebook для создания чат-голов?"

Это одно:

Позволяет приложению открывать окна с использованием типа TYPE_SYSTEM_ALERT, показанного поверх всех других приложений. Очень мало приложений должно использовать это разрешение; Эти окна предназначены для взаимодействия на уровне системы с пользователем.

Постоянное значение: "android.permission.SYSTEM_ALERT_WINDOW"

// EDIT: полный код здесь :

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 – это полноэкранный, концептуально выделенный интерфейс, который принимает все взаимодействие. Есть несколько исключений из этого. Для начала есть всплывающие диалоги, которые не заполняют экран. Другим является тост для Android, который является неинтерактивным всплывающим окном – вы не можете его трогать, и если вы попробуете, он пойдет на все, что находится внизу.

Вы также можете создавать свои собственные пользовательские интерфейсы. Вы можете добавлять представления непосредственно в WindowManager , указав флаг типа. Главы чата, вероятно, используют TYPE_PHONE . Существует несколько подобных типов, но цель та же: оверлеи специального назначения, которые могут отображаться поверх всего остального без присутствия родительского приложения.

Это только доводит вас до сих пор, из-за проблем с взаимодействием. Сначала ваш оверлей поглотит все взаимодействие, поэтому не только голова получает события, но и блокирует взаимодействие со всем, что находится внизу.

Вы настраиваете это поведение с помощью LayoutParams . FLAG_NOT_TOUCH_MODAL означает, что события за пределами области отображения переходят к базовым пользовательским интерфейсам. Теперь вы обнаружите, что это работает, но другие плохие вещи все еще происходят, например, кнопки назад / меню не попадают в приложения, а не клавиатуру. Чтобы решить эту проблему, вам понадобится FLAG_NOT_FOCUSABLE .

Кроме того, вы получаете побочный эффект от неконцентрируемого бита, который не является хорошим взаимодействием с вашим наложением, например, нажатиями кнопок. Вы можете получить некоторые базовые события касания, хотя вы всегда можете заниматься математикой, и этого, вероятно, достаточно для чат-голов. Просто имейте в виду, что он оставляет вас самостоятельно в большом количестве областей, таких как анимация пользовательского интерфейса.

В этом потоке StackOverflow можно найти хороший обзор деталей, в том числе разрешить потребление избирательного взаимодействия. В частности, одна из ссылок на ответ в конечном итоге приведет вас сюда , что является хорошим примером проекта. Обратите внимание, что ICS изменила то, как это работает немного, но нитки объясняют это.

Это все общедоступный материал API, но на самом деле это не похоже на основную вещь, которую нужно делать, как само собой разумеющееся. Документация усеяна ссылками на поведение специальных системных приложений и не без оснований; Что, если бы все это сделали?

Пружинные головки дают весеннее поведение чат-головок из коробки. Все, что вам нужно определить, – это доступный для главы чата и фрагмент, который открывается после нажатия кнопки чата. Головки чата рушится, когда сведены к минимуму и следуют за пальцем при перетаскивании. Проект включает демонстрационное приложение, которое демонстрирует все встроенные функции.

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