2014-12-23 27 views
8

Ho un menu per la mia attività principale (res/menu/main_menu.xml) e voglio solo un elemento sulla barra delle azioni e il resto deve essere nascosto sotto il menu di tre punti. Three dots menuElementi della barra delle azioni Android come tre punti

Il problema è che non vedo mai i tre punti sulla mia barra delle azioni. Perché non riesco a vedere tre punti? Come forzare gli oggetti da nascondere sotto di esso?

Nota: utilizzo minSdkVersion = "14" e eseguo il test in AVD.

risposta

20
<?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/menu_item_share" 
     android:title="@string/share" 
     android:icon="@android:drawable/ic_menu_share" 
     app:showAsAction="ifRoom" 
     android:actionProviderClass="android.widget.ShareActionProvider" /> 

    <item 
     android:id="@+id/empty" 
     android:title="@string/options" 
     android:orderInCategory="101" 
     app:showAsAction="always" 
     android:icon="@drawable/ic_action_overflow"> 

     <menu> 

      <item android:id="@+id/action_settings" 
       android:icon="@android:drawable/ic_menu_preferences" 
       app:showAsAction="ifRoom" 
       android:title="@string/settings" /> 

      <item android:id="@+id/action_help" 
       android:icon="@android:drawable/ic_menu_help" 
       app:showAsAction="ifRoom" 
       android:title="@string/help" /> 

     </menu> 

    </item> 

</menu> 

Sarà necessario aggiungere le ic_action_overflow icone per i tuoi res/drawable... cartelle una volta che li hai scaricato da qui: http://developer.android.com/design/downloads/index.html

+0

Vedere questa risposta per come/dove ottenere le icone effettive di overflow: http://stackoverflow.com/a/17557247/1617737 –

2

Perché non riesco a vedere l'elemento di tre punti?

L'emulatore emula un dispositivo dotato di un pulsante MENU. Se sul dispositivo è presente un pulsante MENU, il pulsante MENU richiama l'overflow.

+0

Posso pulsante del menu rimuovere dal mio AVD per vedere come appare come in un dispositivo senza pulsante di menu? –

+0

@MustafaChelik: Sì, anche se potrebbe essere imbarazzante. Se si utilizza Eclipse o è possibile eseguire il comando ** 'android avd' ** per visualizzare il gestore AVD originale, nella scheda Definizioni dispositivo, si modificherà il menu a discesa" Pulsanti "su" Software ". In Android Studio AVD Manager, l'equivalente è la casella "Has Hardware Buttons (Back/Home/Menu)" nella definizione del dispositivo. Oppure, nel file 'config.ini' per la definizione AVD (ad es.' ~/.android/avd /.../ config.ini'), 'hw.mainKeys' dovrebbe essere' no' da emulare un dispositivo senza un tasto MENU. – CommonsWare

4

questa soluzione fornita da Ban-geoingegneria è uno molto intresting ... 3 punti icona a volte non viene visualizzata se si utilizza Android: showAsAction namespace Android: namespace invece personalizzato come:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 
<item 
    android:id="@+id/taskNotificationsBtn" 
    app:showAsAction="always" 
    android:icon="@drawable/tasks"/> 

Ma la soluzione fornita da ban-geoengineering mi aiuta a risolvere il problema con l'inversione della direzione degli oggetti di ActionBar per abbinarli al layout arabo. Ho usato biblioteca ActionBarRTLizer e approccio standard con sistema operativo Android 3dots causa alcuni bug quando le icone di elementi di menu coprono l'un l'altro a volte (situazione molto frustratign), ma questa soluzione personalizzata

<item 
    android:id="@+id/empty" 
    android:title="@string/options" 
    android:orderInCategory="101" 
    android:showAsAction="always" 
    android:icon="@drawable/ic_action_overflow"> 

    <menu> 

     <item android:id="@+id/action_settings" 
      android:icon="@android:drawable/ic_menu_preferences" 
      android:showAsAction="ifRoom" 
      android:title="@string/settings" /> 

     <item android:id="@+id/action_help" 
      android:icon="@android:drawable/ic_menu_help" 
      android:showAsAction="ifRoom" 
      android:title="@string/help" /> 

    </menu> 

</item> 

risolto il problema e RTL funziona perfettamente! :)

Questo può anche essere utile se si desidera gestire i pulsanti del menu hardware:

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_MENU) { 
    // do stuff 
    return true; 
    } else { 
    return super.onKeyUp(keyCode, event); 
    } 
} 

e aggiungere qui: mMenuReference.performIdentifierAction (R.id.menu_0, 1);

al fine di sostituire sottomenu visualizzato come menu di overflow a seconda ad esempio su attività in corso è possibile utilizzare questa soluzione:

public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate your main_menu into the menu 
    getMenuInflater().inflate(R.menu.main_menu, menu); 

    // Find the menuItem to add your SubMenu 
    MenuItem myMenuItem = menu.findItem(R.id.my_menu_item); 

    // Inflating the sub_menu menu this way, will add its menu items 
    // to the empty SubMenu you created in the xml 
    getMenuInflater().inflate(R.menu.sub_menu, myMenuItem.getSubMenu()); 

}

0

La soluzione può essere trovata qui https://stackoverflow.com/a/27502405/1808829, che ha funzionato perfetto per me. Non c'è bisogno di lavorare con il personale xml, è fatto solo programmaticamente.

private void getOverflowMenu() { 

     try { 
      ViewConfiguration config = ViewConfiguration.get(this); 
      Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); 
      if(menuKeyField != null) { 
       menuKeyField.setAccessible(true); 
       menuKeyField.setBoolean(config, false); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
0

provare questo;

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/menu_new_content_facebook" 
     android:orderInCategory="100" 
     android:title="@string/str_share_facebook" 
     app:showAsAction="never" /> 

    <item 
     android:id="@+id/menu_new_content_twitter" 
     android:orderInCategory="200" 
     android:title="@string/str_share_twitter" 
     app:showAsAction="never" /> 
</menu> 

MainActivity.java

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if(id == R.id.menu_new_content_twitter){ 
     // do something 
    } 
    return super.onOptionsItemSelected(item); 
}