web-dev-qa-db-fra.com

Comment ajouter des badges sur le menu de la barre d'outils Icônes des éléments

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:

enter image description here

Comment puis-je faire cela?

15
Artem

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();
            }
        }
    });
}      
23
Faraz Ahmed

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

3
ʍѳђઽ૯ท