Wie erstellt Facebook die Chat Heads auf Android? Was ist die API, um die schwebenden Ansichten über allen anderen Ansichten zu erstellen?
android
facebook
android-windowmanager
Daniel A. White
quelle
quelle
Antworten:
Dieser :
// EDIT: Den vollständigen Code hier :
Vergessen Sie nicht, den Dienst irgendwie zu starten:
.. Und fügen Sie diesen Service Ihrem Manifest hinzu.
quelle
Android-Aktivitäten sind in der Regel konzeptionell dedizierte Vollbild-Benutzeroberflächen, die die gesamte Interaktion übernehmen. Hiervon gibt es einige Ausnahmen. Zunächst gibt es Popup-Dialoge, die den Bildschirm nicht ausfüllen. Ein weiterer Grund ist der Android-Toast, bei dem es sich um ein nicht interaktives Popup handelt. Sie können ihn nicht berühren. Wenn Sie ihn ausprobieren, wird er zu dem angezeigt, was sich darunter befindet.
Sie können auch Ihre eigenen Benutzeroberflächen erstellen. Sie können Ansichten direkt zum hinzufügen
WindowManager
und ein Typflag angeben. Chat Heads verwendet wahrscheinlich TYPE_PHONE . Es gibt einige ähnliche Typen, aber der Zweck ist der gleiche: Überlagerungen für spezielle Zwecke, die über allem anderen angezeigt werden können, ohne dass die übergeordnete Anwendung offensichtlich vorhanden ist.Das bringt Sie jedoch nur aufgrund von Interaktionsproblemen so weit. Zuerst absorbiert Ihre Überlagerung die gesamte Interaktion, sodass der Kopf nicht nur Ereignisse erhält, sondern Sie die Interaktion für alles darunter blockieren.
Sie konfigurieren dieses Verhalten mit den LayoutParams .
FLAG_NOT_TOUCH_MODAL
bedeutet, dass Ereignisse außerhalb Ihres Anzeigebereichs an die zugrunde liegenden Benutzeroberflächen gesendet werden. Sie werden jetzt feststellen, dass es funktioniert, aber dass andere schlimme Dinge immer noch passieren, wie die Schaltflächen Zurück / Menü, die nicht auf Apps gerichtet sind, und keine Tastatur. Um das zu lösen, brauchen SieFLAG_NOT_FOCUSABLE
.Sie erhalten auch einen Nebeneffekt durch das nicht fokussierbare Bit, das keine netten Interaktionen mehr mit Ihrem Overlay darstellt, z. B. Drücken von Tasten. Sie können jedoch einige grundlegende Berührungsereignisse erhalten, an denen Sie immer rechnen können, und das ist wahrscheinlich genug für Chat Heads. Seien Sie sich nur bewusst, dass Sie in vielen Bereichen, wie z. B. der UI-Animation, allein sind.
Eine gute Übersicht über die Details, einschließlich der Berücksichtigung des selektiven Interaktionsverbrauchs, finden Sie in diesem StackOverflow-Thread . Insbesondere einer der Antwortlinks führt Sie irgendwann hierher , was ein gutes Beispielprojekt ist. Beachten Sie, dass ICS die Funktionsweise ein wenig geändert hat, aber die Threads erklären dies.
Dies ist alles öffentliches API-Zeug, aber es scheint nicht wirklich eine Mainstream-Sache zu sein, die man selbstverständlich tun sollte. Die Dokumentation ist mit Verweisen auf spezielle Verhaltensweisen von System-Apps übersät, und das aus gutem Grund. Was wäre, wenn alle es tun würden?
quelle
Springy Heads bietet ein frühlingshaftes Verhalten von Chat-Köpfen. Sie müssen lediglich festlegen, dass der Chat-Kopf gezeichnet werden soll und das Fragment geöffnet werden soll, sobald auf den Chat-Kopf geklickt wird. Die Chatköpfe kollabieren beim Minimieren und folgen beim Ziehen dem Finger.
Das Projekt enthält eine Demo-App, die alle integrierten Funktionen demonstriert. Um es zu verwenden, müssen Sie dies zu Ihren Gradle-Abhängigkeiten hinzufügen.
quelle