So implementieren Sie dynamische Werte auf Menüpunkt in Android

Ich habe einen Menüpunkt in der Aktionsleiste. Zusammen mit dem Menüpunkt Bild, muss ich zeigen, einige Nummer mit ihm verbunden, die sich oft ändern wird. Ich benutze keine Action Bar sherlock. Das will ich nicht benutzen Ansonsten funktioniert alles gut. In dem gezeigten Bild ist das weiße Icon-Symbol. Ich muss die Nummer mit dem roten Farbhintergrund dynamisch erzeugen. Wie kann ich das in Android machen?

Hier ist das Beispielbild:

  • Anzeigen und Navigieren von großen benutzerdefinierten Karten offline mit Phonegap
  • Android SQLite Löschen von Zeilenproblemen
  • Android-Mapview mit Fragmenten kann nicht zweimal hinzugefügt werden?
  • Wie gebe ich einen Kontext an eine AsyncTask?
  • Floating Action Button Animation Problem
  • Wie kann man Browser für Android erstellen?
  • Bildbeschreibung hier eingeben

    Aktualisieren:

    Ich habe diesen Menüpunkt in meinem menu.xml. Dies sollte wie ein Benachrichtigungsmenüpunkt funktionieren, der die Anzahl der Benachrichtigungszählungen anzeigt. Ich setze das Menüsymbol wie,

    menuItem.setIcon(image); 

    Nun, oben auf dem Menüpunkt muss ich eine Textansicht platzieren, die die Gesamtzahl der Benachrichtigungen hat.

    Ist es möglich, diese Funktionalität mit viewbadger umzusetzen? Github url

  • Gradle-Projekt-Refresh fehlgeschlagen nach Android Studio Update
  • Android SQLite ORDER BY funktioniert nicht
  • AOSP auf benutzerdefiniertem Gerät aufbauen
  • Android nicht verwenden / finden meine hebräische Lokalisierung.
  • Wo ist das Bündel von onSaveInstanceState gespeichert?
  • Cordova Konnte nicht genügend Platz für 2097152KB Objekthaufen reservieren
  • 4 Solutions collect form web for “So implementieren Sie dynamische Werte auf Menüpunkt in Android”

    Ich habe entdeckt, wie man ein actionView zu einem Menüpunkt hinzufügt und als Set-Werte auf die Ansicht im Code abruft.

    Siehe hier: https://stackoverflow.com/a/16648170/857681

    Nach einer Menge von fast allen Ressourcen auf SO Ich wandte mich an Blogs; Erfolgreich. Ich möchte teilen, was für mich gearbeitet hat (Api> = 13); Quelle .

    Lass uns mit dem süßen Code beginnen, wie es benutzt wird :

      public boolean onCreateOptionsMenu(Menu menu) { //inflate menu getMenuInflater().inflate(R.menu.menu_my, menu); // Get the notifications MenuItem and LayerDrawable (layer-list) MenuItem item = menu.findItem(R.id.action_notifications); LayerDrawable icon = (LayerDrawable) item.getIcon(); // Update LayerDrawable's BadgeDrawable Utils2.setBadgeCount(this, icon, 2); return true; } 

    Die menu_my.xml :

     <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> <item android:id="@+id/action_notifications" android:icon="@drawable/ic_menu_notifications" android:title="Notifications" app:showAsAction="always" /> </menu> 

    Diese Klasse, die bequem ein BadgeDrawable macht; Ihr Aussehen kann auch modifiziert werden:

     public class BadgeDrawable extends Drawable { private float mTextSize; private Paint mBadgePaint; private Paint mTextPaint; private Rect mTxtRect = new Rect(); private String mCount = ""; private boolean mWillDraw = false; public BadgeDrawable(Context context) { //mTextSize = context.getResources().getDimension(R.dimen.badge_text_size); mTextSize = 12F; mBadgePaint = new Paint(); mBadgePaint.setColor(Color.RED); mBadgePaint.setAntiAlias(true); mBadgePaint.setStyle(Paint.Style.FILL); mTextPaint = new Paint(); mTextPaint.setColor(Color.WHITE); mTextPaint.setTypeface(Typeface.DEFAULT_BOLD); mTextPaint.setTextSize(mTextSize); mTextPaint.setAntiAlias(true); mTextPaint.setTextAlign(Paint.Align.CENTER); } @Override public void draw(Canvas canvas) { if (!mWillDraw) { return; } Rect bounds = getBounds(); float width = bounds.right - bounds.left; float height = bounds.bottom - bounds.top; // Position the badge in the top-right quadrant of the icon. float radius = ((Math.min(width, height) / 2) - 1) / 2; float centerX = width - radius - 1; float centerY = radius + 1; // Draw badge circle. canvas.drawCircle(centerX, centerY, radius, mBadgePaint); // Draw badge count text inside the circle. mTextPaint.getTextBounds(mCount, 0, mCount.length(), mTxtRect); float textHeight = mTxtRect.bottom - mTxtRect.top; float textY = centerY + (textHeight / 2f); canvas.drawText(mCount, centerX, textY, mTextPaint); } /* Sets the count (ie notifications) to display. */ public void setCount(int count) { mCount = Integer.toString(count); // Only draw a badge if there are notifications. mWillDraw = count > 0; invalidateSelf(); } @Override public void setAlpha(int alpha) { // do nothing } @Override public void setColorFilter(ColorFilter cf) { // do nothing } @Override public int getOpacity() { return PixelFormat.UNKNOWN; } } 

    Diese Klasse, die hilft, die Nummer zu setzen. Ich empfehle, noch mehr Thods zu implementieren, um Abzeichen als Datum zu setzen, etc:

     public class Utils2 { public static void setBadgeCount(Context context, LayerDrawable icon, int count) { BadgeDrawable badge; // Reuse drawable if possible Drawable reuse = icon.findDrawableByLayerId(R.id.ic_badge); if (reuse != null && reuse instanceof BadgeDrawable) { badge = (BadgeDrawable) reuse; } else { badge = new BadgeDrawable(context); } badge.setCount(count); icon.mutate(); icon.setDrawableByLayerId(R.id.ic_badge, badge); } } 

    Und mui importante ein ziehbares (wie ein Layout) in res/drawable :

     <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/ic_notification" android:drawable="@drawable/ice_skate" android:gravity="center" /> <!-- set a place holder Drawable so android:drawable isn't null --> <item android:id="@+id/ic_badge" android:drawable="@drawable/ice_skate" /> </layer-list> 

    Viel glück!

    Hier ist eine Sache, die du probieren kannst:

    Erstellen Sie eine benutzerdefinierte Drawable , die Sie malen Bild im Hintergrund und Text auf der Oberseite des Bildes. Schau dir diesen Beitrag zur Probe an.

    Setzen Sie dann dieses Drawable als MenuItem Hintergrund dynamisch …

    Handlungsansicht verwenden. Es funktioniert mit beiden: default ActionBar und ActionBarSherlock .

    Hier ist ein Beispiel

    Mit diesem Ansatz können Sie einfach Ihre eigene View erstellen (indem Sie ein Layout zum Beispiel aufblasen) und dann tun, was Sie wollen (ändern Sie Hintergrund, ändern Sie Inhalt, fügen Sie weitere Ansichten dynamisch hinzu, wenn Ihre Aktionsansicht Unterklasse von ViewGroup usw.).

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.