Gibt es ein Android-Standardabzeichen oder eine Methode zum Anzeigen des Benachrichtigungssymbols für die Aktionsleiste mit einer Anzahl wie in Google-Beispielen?
Wenn nicht, wie kann man es dann am besten machen?
Ich bin neu in Android, bitte helfen Sie.
Antworten:
Ich bin mir nicht sicher, ob dies die beste Lösung ist oder nicht, aber es ist das, was ich brauche.
Bitte sagen Sie mir, wenn Sie wissen, was für eine bessere Leistung oder Qualität geändert werden muss. In meinem Fall habe ich einen Knopf.
Benutzerdefiniertes Element in meinem Menü - main.xml
Benutzerdefinierte Form zeichnbar (Hintergrundquadrat) - shape_notification.xml
Layout für meine Ansicht - feed_update_count.xml
MainActivity - Einstellen und Aktualisieren meiner Ansicht
quelle
MenuItem item = menu.findItem(R.id.badge); MenuItemCompat.setActionView(item, R.layout.feed_update_count); notifCount = (Button) MenuItemCompat.getActionView(item);
android:icon="..."
im Menüpunkt XML nicht. Dasandroid:actionLayout="..."
ist genug da. Für dieButton
im Layout XML, Sie können den selbstschließenden Tag verwenden ,<Button ... />
weil der Tag nicht Inhalt haben kann. Sie müssen das<shape>
Tag schließen (wieder: selbstschließend). Und das brauchst du nichtinvalidateOptionsMenu()
. Für mich funktioniert das nicht einmal, da das Abzeichen immer wieder aus XML aufgeblasen wird. Das GanzesetNotifCount(...)
ist also nutzlos. Rufen Sie einfachsetText(...)
das Abzeichen an. Und Sie können direktgetActionView()
zuButton
besetzen.Bearbeiten Seit Version 26 der Support-Bibliothek (oder AndroidX) müssen Sie keine benutzerdefinierten Elemente mehr implementieren
OnLongClickListener
, um den Tooltip anzuzeigen. Nennen Sie dies einfach:Ich werde nur meinen Code teilen, falls jemand so etwas möchte:
layout / menu / menu_actionbar.xml
layout / action_bar_notifitcation_icon.xml
Hinweis Stil und Android: anklickbare Eigenschaften. Dadurch wird das Layout so groß wie eine Schaltfläche und der Hintergrund wird grau, wenn er berührt wird.
drawable-xhdpi / ic_bell.png
Ein 64x64-Pixel-Bild mit 10 Pixel breiten Auffüllungen von allen Seiten. Sie sollten 8 Pixel breite Auffüllungen haben, aber ich finde, dass die meisten Standardelemente etwas kleiner sind. Natürlich möchten Sie unterschiedliche Größen für unterschiedliche Dichten verwenden.
drawable / round_square.xml
Hier ist # ff222222 (Farbe # 222222 mit Alpha #ff (vollständig sichtbar)) die Hintergrundfarbe meiner Aktionsleiste.
com / ubergeek42 / WeechatAndroid / WeechatActivity.java
Hier machen wir es anklickbar und aktualisierbar! Ich habe einen abstrakten Listener erstellt, der die Toast-Erstellung auf onLongClick ermöglicht. Der Code stammt aus den Quellen von ActionBarSherlock .
quelle
app:actionLayout="@layout/action_bar_notifitcation_icon"
statt setzen,android:actionLayout="@layout/action_bar_notifitcation_icon"
wenn SieMenuItemCompat.getActionView
stattmenu.findItem(R.id.menu_hotlist).getActionView();
für Kompatibilitätsprobleme verwenden müssen.MenuItem.getActionView
ist nicht kompatibel mit API Level <11.android:actionLayout
; AppCompat:app:actionLayout
in Ihrem Menüpunkt.Nur um hinzuzufügen. Wenn jemand eine gefüllte Kreisblase implementieren möchte, ist hier der Code (Name
bage_circle.xml
):Möglicherweise müssen Sie die Dicke an Ihre Bedürfnisse anpassen.
BEARBEITEN: Hier ist das Layout für die Schaltfläche (nennen Sie es
badge_layout.xml
):Im Menü Element erstellen:
Um
onCreateOptionsMenu
auf den Menüpunkt zu verweisen:Legen Sie nach Erhalt der Benachrichtigung für Nachrichten die Anzahl fest:
Dieser Code verwendet Iconify-fontawesome .
quelle
Ich mag keine
ActionView
basierten Lösungen, meine Idee ist:TextView
, dasTextView
von der Anwendung ausgefüllt wirdwenn Sie ein zeichnen müssen
MenuItem
:2.1. Layout aufblasen
2.2. call
measure()
&layout()
(andernfallsview
ist 0px x 0px, es ist zu klein für die meisten Anwendungsfälle)2.3. Setze den
TextView
Text des2.4. "Screenshot" der Ansicht machen
2.6.
MenuItem
Das Symbol des Sets basiert auf der Bitmap, die in 2.4 erstellt wurdeprofitieren!
Das Ergebnis sollte also so etwas wie sein
@drawable/unread_background
ist derTextView
Hintergrund von Grün , der@drawable/ic_menu_gallery
hier nicht wirklich benötigt wird, sondern nur, um das Ergebnis des Layouts in der IDE in der Vorschau anzuzeigen.Code in
onCreateOptionsMenu
/ hinzufügenonPrepareOptionsMenu
Implementieren Sie die Build-the-Icon-Methode:
Der vollständige Code ist hier: https://github.com/cvoronin/ActionBarMenuItemCounter
quelle
Ok, damit die @ AndrewS- Lösung mit der v7 appCompat-Bibliothek funktioniert :
.
Der Rest des Codes ist der gleiche.
quelle
android:actionLayout
,app:actionLayout
funktioniert es wie Charme.Schauen Sie sich die Antworten auf diese Fragen an, insbesondere die zweite mit Beispielcode:
So implementieren Sie dynamische Werte für Menüpunkte in Android
Wie erhalte ich Text auf einem ActionBar-Symbol?
Soweit ich weiß, müssen Sie Ihre eigene benutzerdefinierte
ActionView
Implementierung erstellen . Eine Alternative könnte ein Brauch seinDrawable
. Beachten Sie, dass anscheinend keine native Implementierung einer Benachrichtigungsanzahl für die Aktionsleiste vorhanden ist.BEARBEITEN: Die gesuchte Antwort mit Code: Benutzerdefinierte Benachrichtigungsansicht mit Beispielimplementierung
quelle
Drawable
s einfügen, wie in den folgenden zwei Links gezeigt: stackoverflow.com/questions/6691818/… und stackoverflow.com/questions/3972445/…Drawable
über so etwas wie den Link hier erstellen und dann ein Attribut für Ihre benutzerdefinierteDrawable
erstellen, das Text enthält, damit Sie das Ganze erstellen können in XML und passen Sie es an, wie Sie es wünschen. Alternativ können Sie das Drawable in Java hinzufügen, wenn dies zu schwierig ist.Wenn Sie die Symbolleiste verwenden:
und rufen Sie in Ihren Ladedaten refreshMenu () auf:
quelle
Ich habe hier eine sehr gute Lösung gefunden , ich benutze sie mit Kotlin.
Zunächst müssen Sie im Zeichenordner Folgendes erstellen
item_count.xml
:In Ihrem
Activity_Main
Layout mögen einige:Und Sie können ändern wie:
quelle
Ich habe einen besseren Weg gefunden, es zu tun. wenn Sie so etwas verwenden möchten
Verwenden Sie diese Abhängigkeit
Erstellen Sie eine XML-Datei in drawable und speichern Sie sie als Badge.xml
Wo immer Sie dieses Abzeichen verwenden möchten, verwenden Sie den folgenden Code in XML. Mithilfe dieser Funktion können Sie das Abzeichen in der oberen rechten Ecke Ihres Bildes oder etwas anderem sehen.
Jetzt endlich auf yourFile.java diese 2 einfache Sache verwenden .. 1) Definieren
2) Wenn Ihre Schleife oder irgendetwas, das diese Zahl zählt, Folgendes verwendet:
Hier,
mBadge.setNumber(0)
wird nichts zeigen.Ich hoffe das hilft.
quelle