Existe-t-il un badge ou une méthode standard Android pour afficher l'icône de notification de la barre d'action avec un décompte comme sur les exemples Google?
Sinon, quelle est la meilleure façon de le faire?
Je suis nouveau sur Android, veuillez aider.
Réponses:
Je ne sais pas si c'est la meilleure solution ou non, mais c'est ce dont j'ai besoin.
Veuillez me dire si vous savez ce qui doit être changé pour une meilleure performance ou une meilleure qualité. Dans mon cas, j'ai un bouton.
Élément personnalisé dans mon menu - main.xml
Forme personnalisée dessinable (carré d'arrière-plan) - shape_notification.xml
Mise en page pour ma vue - feed_update_count.xml
MainActivity - paramétrer et mettre à jour ma vue
la source
MenuItem item = menu.findItem(R.id.badge); MenuItemCompat.setActionView(item, R.layout.feed_update_count); notifCount = (Button) MenuItemCompat.getActionView(item);
android:icon="..."
de l'élément de menu XML. C'estandroid:actionLayout="..."
assez, là. Pour leButton
XML de mise en page, vous pouvez utiliser la balise à fermeture automatique<Button ... />
car la balise ne peut pas avoir de contenu. Vous devez fermer la<shape>
balise (encore une fois: fermeture automatique). Et vous n'avez pas besoin duinvalidateOptionsMenu()
. Pour moi, cela ne fonctionne même pas, car le badge est toujours gonflé à partir de XML. Donc, le toutsetNotifCount(...)
est inutile. Appelez simplementsetText(...)
le badge. Et vous pouvez jetergetActionView()
àButton
directement.Modifier Depuis la version 26 de la bibliothèque de support (ou androidx), vous n'avez plus besoin d'implémenter une personnalisation
OnLongClickListener
pour afficher l'info-bulle. Appelez simplement ceci:Je vais juste partager mon code au cas où quelqu'un voudrait quelque chose comme ça:
layout / menu / menu_actionbar.xml
layout / action_bar_notifitcation_icon.xml
Note style et android: propriétés cliquables . ceux-ci donnent à la mise en page la taille d'un bouton et rendent l'arrière-plan gris au toucher.
drawable-xhdpi / ic_bell.png
Une image de 64x64 pixels avec 10 pixels de large rembourrage de tous les côtés. Vous êtes censé avoir des rembourrages de 8 pixels de large, mais je trouve que la plupart des éléments par défaut sont légèrement plus petits que cela. Bien sûr, vous voudrez utiliser différentes tailles pour différentes densités.
drawable / round_square.xml
Ici, # ff222222 (couleur # 222222 avec alpha #ff (entièrement visible)) est la couleur d'arrière-plan de ma barre d'action.
com / ubergeek42 / WeechatAndroid / WeechatActivity.java
Ici, nous le rendons cliquable et modifiable! J'ai créé un écouteur abstrait qui fournit la création de Toast sur onLongClick, le code a été extrait des sources d'ActionBarSherlock .
la source
app:actionLayout="@layout/action_bar_notifitcation_icon"
au lieu deandroid:actionLayout="@layout/action_bar_notifitcation_icon"
si vous devez utiliserMenuItemCompat.getActionView
au lieu demenu.findItem(R.id.menu_hotlist).getActionView();
pour des problèmes de compatibilité.MenuItem.getActionView
n'est pas compatible avec le niveau d'API <11.android:actionLayout
:; AppCompat:app:actionLayout
dans votre élément de menu.Juste pour ajouter. Si quelqu'un veut implémenter une bulle de cercle rempli, voici le code (nommez-le
bage_circle.xml
):Vous devrez peut-être ajuster l'épaisseur en fonction de vos besoins.
EDIT: Voici la disposition du bouton (nommez-le
badge_layout.xml
):Dans le menu créer un élément:
Pour
onCreateOptionsMenu
obtenir une référence à l'élément de menu:Après avoir reçu une notification pour les messages, définissez le nombre:
Ce code utilise Iconify-fontawesome .
la source
Je n'aime pas les
ActionView
solutions basées, mon idée est:TextView
, quiTextView
sera remplie par l'applicationlorsque vous devez dessiner un
MenuItem
:2.1. gonfler la mise en page
2.2. call
measure()
&layout()
(sinonview
sera 0px x 0px, c'est trop petit pour la plupart des cas d'utilisation)2.3. définir le
TextView
texte de2.4. faire une "capture d'écran" de la vue
2.6. ensemble
MenuItem
sur l'icône « sur la base de bitmap créé sur 2,4profit!
donc, le résultat devrait être quelque chose comme
@drawable/unread_background
est ceTextView
fond vert ,@drawable/ic_menu_gallery
n'est pas vraiment nécessaire ici, c'est juste pour prévisualiser le résultat de la mise en page dans l'IDE.ajouter du code dans
onCreateOptionsMenu
/onPrepareOptionsMenu
Implémentez la méthode build-the-icon:
Le code complet est ici: https://github.com/cvoronin/ActionBarMenuItemCounter
la source
Ok, pour que la solution @AndrewS fonctionne avec la bibliothèque appCompat v7 :
.
Le reste du code est le même.
la source
android:actionLayout
àapp:actionLayout
ce workes comme un charme.Essayez de regarder les réponses à ces questions, en particulier la deuxième qui contient un exemple de code:
Comment implémenter des valeurs dynamiques sur l'élément de menu dans Android
Comment obtenir du texte sur une icône ActionBar?
D'après ce que je vois, vous devrez créer votre propre
ActionView
implémentation personnalisée . Une alternative pourrait être une coutumeDrawable
. Notez qu'il ne semble y avoir aucune implémentation native d'un nombre de notifications pour la barre d'action.EDIT: La réponse que vous recherchiez, avec code: Vue de notification personnalisée avec exemple d'implémentation
la source
Drawable
s comme indiqué dans les deux liens suivants: stackoverflow.com/questions/6691818/... et stackoverflow.com/questions/3972445/…Drawable
travers quelque chose comme le lien ici , puis créer un attribut pour votre personnaliséDrawable
qui contient du texte afin que vous puissiez créer le tout en XML et adaptez-le comme vous le souhaitez. Sinon, vous pouvez ajouter le Drawable en Java si cela est trop difficile.Lorsque vous utilisez la barre d'outils:
et dans votre chargement de données, appelez refreshMenu ():
la source
J'ai trouvé une très bonne solution ici , je l'utilise avec kotlin.
Tout d'abord, dans le dossier dessinable, vous devez créer
item_count.xml
:Dans votre
Activity_Main
mise en page, certains aiment:Et vous pouvez modifier comme:
la source
J'ai trouvé une meilleure façon de le faire. si vous voulez utiliser quelque chose comme ça
Utilisez cette dépendance
créez un fichier xml dans drawable et enregistrez-le sous Badge.xml
Maintenant, partout où vous souhaitez utiliser ce badge, utilisez le code suivant en xml. avec l'aide de cela, vous pourrez voir ce badge dans le coin supérieur droit de votre image ou quoi que ce soit.
Maintenant enfin sur yourFile.java, utilisez cette 2 chose simple. 1) Définir
2) où votre boucle ou tout ce qui compte ce nombre utilise ceci:
ici,
mBadge.setNumber(0)
ne montrera rien.J'espère que cette aide.
la source