Какие API в Android используются Facebook для создания чат-голов?
Как Facebook создает чат-головки на Android? Что такое API для создания плавающих просмотров поверх всех других видов?
- Facebook Like Button - как отключить комментарий?
- Загрузить фото в Facebook с Android Android SDK в Android
- загрузить видео в facebook в android
- Adblock-подобный плагин для скрытия виджетов, кнопок и т. Д.
- Как перечислить пользователей facebook, которые любят страницу или интерес
- Кнопка Facebook share и пользовательский текст
- Интеграция с андроидной фейсбукой
- Как изменить кнопку входа в facebook с моим пользовательским изображением
Это одно:
Позволяет приложению открывать windows с использованием типа TYPE_SYSTEM_ALERT, показанного поверх всех других приложений. Очень мало приложений должно использовать это разрешение; эти windows предназначены для взаимодействия на уровне системы с пользователем.
Постоянное значение: “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
.
Кроме того, вы получаете побочный эффект от неконцентрируемого бита, который не является хорошим взаимодействием с вашим наложением, например нажатиями кнопок. Вы можете получить некоторые базовые события касания, хотя вы всегда можете заниматься математикой, и этого, вероятно, достаточно для чат-голов. Просто имейте в виду, что он оставляет вас по своему усмотрению в большом количестве областей, таких как анимация пользовательского интерфейса.
В этом streamе StackOverflow можно найти хороший обзор деталей, в том числе разрешить потребление избирательного взаимодействия. В частности, одна из ссылок на ответ в конечном итоге приведет вас сюда , что является хорошим примером проекта. Обратите внимание, что ICS изменила то, как это работает немного, но нитки объясняют это.
Это все общеansible материал API, но на самом деле это не похоже на основную вещь, которую нужно делать, как само собой разумеющееся. Документация усеяна ссылками на поведение специальных системных приложений и не без оснований; что, если бы все это сделали?
Пружинные головки дают весеннее поведение чат-головок из коробки. Все, что вам нужно определить, – это ansible для главы чата и fragment, который открывается после нажатия кнопки чата. Головки чата рушится, когда сведены к минимуму, и следуйте пальцем при перетаскивании.
Проект включает демонстрационное приложение, которое демонстрирует все встроенные функции. Чтобы использовать его, вам нужно добавить это в свои зависимости от gradleиента.
compile 'com.flipkart.springyheads:library:0.9.6'