Как Facebook создает чат-головы на Android? Что такое API для создания плавающих представлений поверх всех остальных представлений?
android
facebook
android-windowmanager
Даниэль А. Уайт
источник
источник
Ответы:
Вот этот :
// РЕДАКТИРОВАТЬ: Полный код здесь :
Не забудьте запустить сервис как-нибудь:
.. И добавьте эту услугу в свой манифест.
источник
Как правило, действия Android представляют собой полноэкранные, концептуально выделенные пользовательские интерфейсы, которые принимают на себя все взаимодействие. Есть несколько исключений из этого. Для начала, есть всплывающие диалоги, которые не заполняют экран. Другой - тост Android, который является неинтерактивным всплывающим окном - вы не можете прикоснуться к нему, и если вы попробуете, то перейдете к тому, что находится под ним.
Вы также можете создавать свои собственные специальные интерфейсы. Вы можете добавить представления непосредственно к
WindowManager
, указав флаг типа. Вероятно, Chat Heads использует TYPE_PHONE . Есть несколько похожих типов, но цель та же: специальные наложения, которые могут появляться поверх чего-либо еще без присутствия родительского приложения.Впрочем, это только из-за проблем с взаимодействием. Сначала ваш оверлей будет поглощать все взаимодействие, поэтому не только голова получает события, но вы блокируете взаимодействие со всем, что находится под ним.
Вы настраиваете это поведение, используя LayoutParams .
FLAG_NOT_TOUCH_MODAL
означает, что события за пределами вашей области отображения идут в базовые интерфейсы. Теперь вы обнаружите, что это работает, но другие плохие вещи все еще случаются, например, кнопки «назад» / «меню» не перенаправляются на приложения, плюс нет клавиатуры. Чтобы решить, что вам нужноFLAG_NOT_FOCUSABLE
.Вы также получаете побочный эффект от не фокусируемого бита, который больше не является приятным взаимодействием с вашим оверлеем, например, нажатия кнопок. Вы можете получить некоторые базовые сенсорные события, на которых вы всегда можете сделать математику, и этого, вероятно, достаточно для руководителей чата. Просто знайте, что это оставляет вас в одиночестве во многих областях, таких как анимация пользовательского интерфейса.
Хороший обзор деталей, включая возможность выборочного потребления взаимодействия, можно найти в этом потоке StackOverflow . В частности, одна из ссылок с ответами в конечном итоге приведет вас сюда , что является хорошим примером проекта. Обратите внимание, что ICS немного изменил то, как это работает, но потоки объясняют это.
Это все общедоступный API-интерфейс, но на самом деле это не похоже на то, что нужно делать как само собой разумеющееся. Документация изобилует ссылками на специальное поведение системных приложений и имеет веские основания; что если бы все это сделали?
источник
Упругие головы дают основанное на весне поведение чат-головок из коробки. Все, что вам нужно определить - это нарисовать заголовок чата и фрагмент, который открывается после щелчка по заголовку чата. Головки чата сворачиваются при сворачивании и следуют за пальцем при перетаскивании.
Проект включает в себя демонстрационное приложение, которое демонстрирует все встроенные функции. Чтобы использовать его, вам нужно добавить это в ваши зависимости gradle.
источник