Comment Facebook crée-t-il les têtes de conversation sur Android? Quelle est l'API pour créer les vues flottantes au-dessus de toutes les autres vues?
android
facebook
android-windowmanager
Daniel A. White
la source
la source
Réponses:
Celui- ci:
// EDIT: Le code complet ici :
N'oubliez pas de démarrer le service d'une manière ou d'une autre:
.. Et ajoutez ce service à votre manifeste.
la source
En règle générale, les activités Android sont en plein écran, des interfaces utilisateur conceptuellement dédiées qui prennent toute l'interaction. Il y a quelques exceptions à cela. Pour commencer, il existe des boîtes de dialogue contextuelles qui ne remplissent pas l'écran. Un autre est le toast Android, qui est une fenêtre contextuelle non interactive - vous ne pouvez pas le toucher, et si vous essayez, il ira à tout ce qui se trouve en dessous.
Vous pouvez également créer vos propres interfaces utilisateur spéciales. Vous pouvez ajouter des vues directement à
WindowManager
, en spécifiant un indicateur de type. Les têtes de conversation utilisent probablement TYPE_PHONE . Il existe quelques types similaires, mais le but est le même: des superpositions à usage spécial qui peuvent apparaître par-dessus toute autre chose sans que l'application parent soit apparemment présente.Cependant, cela ne vous amène à ce jour qu'en raison de problèmes d'interaction. Au début, votre superposition absorbera toute l'interaction, donc non seulement la tête reçoit des événements, mais vous bloquez l'interaction avec tout ce qui se trouve en dessous.
Vous configurez ce comportement à l'aide des LayoutParams .
FLAG_NOT_TOUCH_MODAL
signifie que les événements en dehors de votre zone d'affichage vont aux interfaces utilisateur sous-jacentes. Vous verrez maintenant que cela fonctionne, mais que d'autres mauvaises choses se produisent toujours, comme les boutons de retour / menu ne sont pas dirigés vers les applications, plus aucun clavier. Pour résoudre ce problème, vous en avez besoinFLAG_NOT_FOCUSABLE
.Vous obtenez également un effet secondaire du bit non focalisable, ce qui n'est plus une bonne interaction avec votre superposition, par exemple des pressions sur des boutons. Vous pouvez obtenir des événements tactiles de base, sur lesquels vous pouvez toujours faire des calculs, et c'est probablement suffisant pour les têtes de conversation. Sachez simplement que cela vous laisse seul dans de nombreux domaines, comme l'animation d'interface utilisateur.
Un bon aperçu des détails, y compris la possibilité d'une consommation d'interaction sélective, peut être trouvé dans ce thread StackOverflow . En particulier, l'un des liens de réponse vous mènera éventuellement ici , qui est un bon exemple de projet. Notez qu'ICS a un peu changé la façon dont cela fonctionne, mais les discussions expliquent cela.
Ce sont tous des trucs d'API publics, mais cela ne semble pas vraiment être une chose courante que l'on devrait faire, bien sûr. La documentation est jonchée de références à des comportements d'application système spéciaux, et pour cause; Et si tout le monde le faisait?
la source
Les têtes élastiques donnent un comportement basé sur les ressorts des têtes de chat hors de la boîte. Tout ce que vous avez à définir est le dessinable pour la tête de conversation et le fragment à ouvrir une fois que la tête de conversation est cliquée. Les têtes de discussion s'effondrent lorsqu'elles sont réduites et suivent le doigt lorsqu'elles sont déplacées.
Le projet comprend une application de démonstration qui montre toutes les fonctionnalités intégrées. Pour l'utiliser, vous devez l'ajouter à vos dépendances gradle.
la source