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:

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

  • Wie fügt man Titel in Navigation Schublade Layout?
  • Android ActionBar-Kompatibilität: MenuItem.setActionView (Ansicht)
  • Abfangen der Android-Menü-Taste in einem PopupWindow
  • Richtige Benutzererfahrung für ActionBar auf Handys mit Menütasten?
  • Skin Optionen Menü Android
  • Keine Ressource-ID gefunden für Attribut 'showAsAction' im Paket 'android'
  • Spinner zum Aktionsmenü hinzufügen
  • Android Verschiedene Menü-Ressourcen
  • 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.