5

So come visualizzare le icone nel menu di overflow di ActionBar. Questo è quello che uso,Mostra icone nel menu di overflow nella barra delle azioni contestuali

@Override 
    public boolean onMenuOpened(int featureId, Menu menu) { 
     if (featureId == Window.FEATURE_ACTION_BAR && menu != null) { 

      if (menu.getClass().getSimpleName().equals("MenuBuilder")) { 
       try { 
        Method m = menu.getClass().getDeclaredMethod(
          "setOptionalIconsVisible", Boolean.TYPE); 
        m.setAccessible(true); 
        m.invoke(menu, true); 
       } catch (NoSuchMethodException e) { 
        Log.e("TAG", "onMenuOpened", e); 
       } catch (Exception e) { 
        throw new RuntimeException(e); 
       } 
      } 
     } 
     return super.onMenuOpened(featureId, menu); 
    } 

Ma quando ho premere a lungo su qualsiasi elemento della mia ListView CAB inizia. Ora, quando apro il menu di overflow del CAB, il menu non ha icone. Come lo posso fare?

Grazie in anticipo.

+0

Qualcuno può aiutarmi per favore? –

+0

Questa soluzione utilizza la riflessione e non credo che sopravviverà attraverso l'oscuramento del proguard. – f470071

risposta

5

Ho aspettato 2 giorni ma non ho ricevuto risposta. Così risolto io stesso.

L'idea è abbastanza semplice qui. È necessario creare il proprio elemento di overflow nel e creare un menu nidificato per mostrare sia l'icona che il testo.

vedere il codice riportato di seguito,

<item 
     android:id="@+id/overflow" 
     android:icon="@drawable/ic_overflow_white" 
     android:orderInCategory="201" 
     android:title="@string/overflow" 
     app:showAsAction="always"> 

     <menu> 
      <item 
       android:id="@+id/cab_menu_select_all" 
       android:icon="@drawable/ic_select_all_grey" 
       android:orderInCategory="100" 
       android:title="@string/cab_menu_select_all" 
       app:showAsAction="always|withText"></item> 
     </menu> 
    </item> 

Il trucco è quello di creare i menu nidificate. Puoi aggiungere tutti gli elementi che desideri.

+0

Sì. Ma cosa succede se il menu di livello superiore ha abbastanza elementi che il menu di overflow viene mostrato dal sistema stesso. Abbiamo quindi due overflow: uno "falso" e uno dal sistema? – f470071

+0

Sì, questo è ciò che accade in questi casi. –