2014-12-23 20 views
8

Ich habe ein Menü für meine Haupttätigkeit (res/menu/main_menu.xml) und ich möchte nur ein Element auf der Aktionsleiste und der Rest soll unter drei Punkte Menü ausgeblendet werden. Three dots menuAndroid Actionbar Artikel als drei Punkte

Das Problem ist, ich sehe nie die drei Punkte auf meiner Actionbar. Warum kann ich drei Punkte nicht sehen? Wie erzwinge ich, dass Gegenstände versteckt werden?

Hinweis: Ich verwende minSdkVersion = "14" und ich teste in AVD.

Antwort

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> 

Sie müssen die ic_action_overflow Symbole auf Ihre res/drawable... Ordner hinzufügen, sobald Sie sie von hier heruntergeladen haben: http://developer.android.com/design/downloads/index.html ein

+0

Finden Sie diese Antwort für wie/wo die tatsächlichen Überlaufsymbole erhalten: http://stackoverflow.com/a/17557247/1617737 –

2

Warum kann ich drei Punkte nicht sehen?

Ihr Emulator emuliert ein Gerät mit einer MENU-Taste. Wenn am Gerät eine MENU-Taste vorhanden ist, wird mit der MENU-Taste der Überlauf angezeigt.

+0

Kann ich Menü-Taste aus meinem AVD entfernen, um zu sehen, wie es wie ohne Menü-Taste in einem Gerät aussieht? –

+0

@MustafaChelik: Ja, obwohl es vielleicht peinlich sein kann. Wenn Sie Eclipse verwenden oder den Befehl ** 'android avd' ** ausführen können, um den ursprünglichen AVD-Manager aufzurufen, ändern Sie auf der Registerkarte Gerätedefinitionen die Dropdown-Liste" Schaltflächen "in" Software ". Im Android Studio AVD Manager entspricht das Kontrollkästchen "Hardware-Schaltflächen (Zurück/Home/Menü)" in der Gerätedefinition. Oder in der 'config.ini' -Datei für die AVD-Definition (zB' ~/.android/avd /.../ config.ini') müssten die 'hw.mainKeys'' no' sein um zu emulieren ein Gerät ohne MENU-Taste. – CommonsWare

4

diese Lösung zur Verfügung gestellt von ban-Geo-Engineering ist intresting sehr ... 3 dot Symbol manchmal nicht angezeigt, wenn Sie android verwenden: showAsAction Namespace android: statt benutzerdefinierten Namespace wie:

<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"/> 

Aber die Lösung von ban-geoengineering hilft mir, das Problem zu lösen, die ActionBar-Elemente umzukehren, um sie dem arabischen Layout anzupassen. Ich habe verwendet ActionBarRTLizer Bibliothek und Standard-Ansatz mit Android OS 3dots verursacht einige Fehler, wenn Menüpunkt Symbole einander decken manchmal (sehr frustratign Situation), aber diese kundenspezifische Lösung

<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> 

das Problem gelöst und RTL funktioniert sehr gut! :)

Dies kann auch hilfreich sein, wenn Sie Hardware-Menütasten behandeln möchten:

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

und fügen Sie hier: mMenuReference.performIdentifierAction (R.id.menu_0, 1);

um Untermenü zu ersetzen angezeigt als Überlaufmenü abhängig zum Beispiel über aktuelle Aktivität Sie diese Lösung verwenden:

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

Die Lösung hier https://stackoverflow.com/a/27502405/1808829 werden kann, die gearbeitet Perfekt für mich. Keine Notwendigkeit, mit XML-Mitarbeitern zu arbeiten, es wird nur programmatisch gemacht.

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

versuchen Sie dies;

Menü.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); 
}