J'ai essayé de trouver une réponse pour moi mais je n'ai pas pu la trouver.
J'ai besoin de créer un badge sur l'icône MenuItem dans la barre d'outils, comme ceci:
Comment puis-je faire cela?
Voici la fonctionnalité étape par étape:
ajouter menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">
<item
Android:id="@+id/actionNotifications"
Android:icon="@drawable/ic_info_outline_white_24dp"
Android:menuCategory="secondary"
Android:orderInCategory="1"
Android:title="Cart"
app:actionLayout="@layout/notification_layout"
app:showAsAction="always" />
</menu>
Ajoutez ensuite notification_layout.xml, cette disposition sera utilisée comme disposition des icônes de notification
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
style="@Android:style/Widget.ActionButton"
Android:layout_width="wrap_content"
Android:layout_height="fill_parent"
Android:layout_gravity="center"
Android:background="@Android:color/transparent"
Android:clickable="true"
Android:gravity="center"
Android:orientation="vertical">
<ImageView
Android:id="@+id/hotlist_bell"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_margin="0dp"
Android:contentDescription="Notification Icon"
Android:gravity="center"
Android:src="@drawable/ic_info_outline_white_24dp" />
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/txtCount"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="@dimen/x5dp"
Android:layout_marginLeft="@dimen/x10dp"
Android:layout_marginRight="0dp"
Android:background="@drawable/pointer_"
Android:gravity="center"
Android:minWidth="17sp"
Android:text="0"
Android:textColor="#ffffffff"
Android:textSize="12sp" />
</RelativeLayout>
maintenant à l'intérieur de l'activité
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
final View notificaitons = menu.findItem(R.id.actionNotifications).getActionView();
txtViewCount = (TextView) notificaitons.findViewById(R.id.txtCount);
updateHotCount(count++);
txtViewCount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateHotCount(count++);
}
});
notificaitons.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO
}
});
return true;
}
Vous pouvez mettre la fonction suivante (tirée de stackoverflow) dans l'activité pour mettre à jour le compteur:
public void updateHotCount(final int new_hot_number) {
count = new_hot_number;
if (count < 0) return;
runOnUiThread(new Runnable() {
@Override
public void run() {
if (count == 0)
txtViewCount.setVisibility(View.GONE);
else {
txtViewCount.setVisibility(View.VISIBLE);
txtViewCount.setText(Integer.toString(count));
// supportInvalidateOptionsMenu();
}
}
});
}
Je pense que c'est possible avec:
<ImageView
Android:id="@+id/counterBackground"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/unread_background" /> <!-- your icon -->
<TextView
Android:id="@+id/count"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="1"
Android:textSize="8sp"
Android:layout_centerInParent="true"
Android:textColor="#FFFFFF" />
Et puis en l'utilisant pour cette icône sous la forme background
., Vous devez également supprimer/désactiver l'icône par défaut.
Vous voudrez peut-être jeter un œil:
Supprimer l'icône de l'application du tiroir de navigation ActionBar ne fonctionne pas
Retirez l'icône du tiroir de navigation et utilisez l'icône de l'application pour l'ouvrir
https://stackoverflow.com/a/29160904/440911
De plus, dans le Android-sdk/platforms/Android-22/data/res
, il devrait y avoir cette icône. Il vous suffit de le trouver et de l'utiliser pour votre usage (par exemple, en ajoutant ImageView
et en l'ajoutant comme background
)
Jetez un œil: https://stackoverflow.com/a/34999691/440911