2017-02-27 3 views
0

Je travaille sur Android Menu Items. Je peux pouvoir ajouter des insignes avec les articles qui sont montrés dans le Action Bar. Mais je veux montrer les mêmes insignes avec les articles de menu de débordement. Y at-il des solutions pour ajouter des badges aux éléments de menu dans le menu de débordement Comme l'image d'échantillon Image 1 et Image 2Comment afficher les badges avec les éléments de menu affichés dans le menu de débordement

Toute aide serait grandement appréciée .. !!!

+0

l'option de menu par défaut ne fonctionnera pas pour vous, essayez la fenêtre contextuelle ou le menu contextuel pour plus de personnalisation –

+1

Afficher 'PopupWindow' avec votre disposition personnalisée lorsque vous cliquez sur le menu. – Harry

Répondre

0

pouvez-vous s'il vous plaît essayer de suivre.

main.xml 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item 
     android:id="@+id/badge" 
     android:actionLayout="@layout/badge_layout" 
     android:title="Badges" 
     android:showAsAction="always"> 
    </item> 
</menu> 

Ici badge_layout est la disposition de votre élément de menu avec le badge.

et suivantes sont le code à implémenter en activité.

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     RelativeLayout badgeLayout = (RelativeLayout) menu.findItem(R.id.badge).getActionView(); 
     mCounter = (TextView) badgeLayout.findViewById(R.id.counter); 
     return true; 
    } 
+0

Ceci est pour Android: showAsAction = "toujours" Mais j'ai besoin d'une solution pour Android: showAsAction = "jamais" –

0

Enfin je l'ai fait avec l'aide ofCustom PopUp Window + BadgeView

Voici ce que je fais.

  1. créé pour la mise en page personnalisée fenêtre pop-up - custom_popup.xml

    <LinearLayout 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"> 
    
        <ImageView 
         android:id="@+id/icon" 
         android:layout_width="36dp" 
         android:layout_height="36dp" 
         android:background="@drawable/icon_menu_facebook" 
         android:text="Icon" /> 
    
        <TextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="Notifications" /> 
    
        <TextView 
         android:id="@+id/badge" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="" /> 
    </LinearLayout> 
    
    <LinearLayout 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"> 
    
        <ImageView 
    
         android:layout_width="36dp" 
         android:layout_height="36dp" 
         android:background="@drawable/icon_menu_facebook" 
         android:text="Icon" /> 
    
        <TextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="Notifications" /> 
    
        <TextView 
    
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="" /> 
    </LinearLayout> 
    
    <LinearLayout 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"> 
    
        <ImageView 
    
         android:layout_width="36dp" 
         android:layout_height="36dp" 
         android:background="@drawable/icon_menu_facebook" 
         android:text="Icon" /> 
    
        <TextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="Notifications" /> 
    
        <TextView 
    
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="" /> 
    </LinearLayout> 
    

2. Ajout d'un menu élément avec une icône personnalisée (menu Débordement Icône) - options_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/ViewSource" 
     android:icon="@drawable/ic_action_viewsource" 
     android:title="ViewSource" 
     app:showAsAction="ifRoom" /> 
    <item 
     android:id="@+id/about" 
     android:icon="@drawable/ic_action_about" 
     android:title="About" 
     app:showAsAction="ifRoom"> 
     <!-- "file" submenu --> 
     <menu> 
      <item 
       android:id="@+id/github" 
       android:icon="@drawable/icon_menu_github" 
       android:title="Github" /> 
      <item 
       android:id="@+id/linkedin" 
       android:icon="@drawable/icon_menu_linkedin" 
       android:title="LinkedIn" /> 
      <item 
       android:id="@+id/twitter" 
       android:icon="@drawable/icon_menu_twitter" 
       android:title="Twitter" /> 
      <item 
       android:id="@+id/facebook" 
       android:icon="@drawable/icon_menu_facebook" 
       android:title="Facebook" /> 
     </menu> 
    </item> 

    <item 
     android:id="@+id/notifications" 
     android:icon="@drawable/ic_action_name" 
     android:title="More" 
     app:showAsAction="always"></item> 

</menu> 
  1. En MainActivity.java ajouté le code suivant avec dans onOptionsItemSelected (point MenuItem)

     case R.id.notifications: 
          LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
          View CustomPopUp = layoutInflater.inflate(R.layout.custom_popup, null); 
          popupWindow = new PopupWindow(CustomPopUp, ActionBar.LayoutParams.WRAP_CONTENT, 
            ActionBar.LayoutParams.WRAP_CONTENT); 
          if (Build.VERSION.SDK_INT >= 21) { 
           popupWindow.setElevation(5.0f); 
          } 
          ViewGroup actionBar = getActionBar(getWindow().getDecorView()); 
          TextView tv_badge = (TextView) CustomPopUp.findViewById(R.id.badge); 
          BadgeView badge = new BadgeView(activity); 
          badge.setTargetView(tv_badge); 
          badge.setBadgeCount(45); 
          popupWindow.showAtLocation(actionBar, Gravity.TOP | Gravity.RIGHT, 0, -70); 
          popupWindow.setAnimationStyle(R.style.Animation); 
          linearlatout.setOnClickListener(new View.OnClickListener() { 
           @Override 
           public void onClick(View v) { 
            popupWindow.dismiss(); 
           } 
          }); 
          return true; 
         default: 
          return super.onOptionsItemSelected(item); 
    

C'est tout .. !!! Bonne codification ... !!!