2014-12-23 15 views
8

Mam menu dla mojej głównej aktywności (res/menu/main_menu.xml) i chcę tylko jeden element na pasku czynności, a reszta powinna być ukryta pod trzema menu kropek. Three dots menuElementy paska narzędzi Android w postaci trzech kropek

Problem polega na tym, że nigdy nie widziałem elementu z trzema kropkami na moim pasku czynności. Dlaczego nie widzę trzech punktów? Jak wymusić ukrywanie przedmiotów pod nim?

Uwaga: Używam minSdkVersion = "14" i testuję w AVD.

Odpowiedz

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> 

Trzeba dodać ic_action_overflow ikony do res/drawable... foldery Po pobraniu ich z tutaj: http://developer.android.com/design/downloads/index.html

+0

Zobacz tę odpowiedź, aby dowiedzieć się, w jaki sposób/gdzie można uzyskać ikony przepełnienia: http://stackoverflow.com/a/17557247/1617737 –

2

Dlaczego nie widzę trzech punktów?

Emulator emuluje urządzenie z przyciskiem MENU. Jeśli na urządzeniu jest przycisk MENU, przycisk MENU wywoła przepełnienie.

+0

mogę usunąć przycisk menu z mojego AVD zobaczyć jak to wygląda w urządzeniu bez przycisku menu? –

+0

@MustafaChelik: Tak, choć może to być niezręczne. Jeśli używasz platformy Eclipse lub możesz uruchomić polecenie ** 'android avd' **, aby wyświetlić oryginalny menedżer AVD, na karcie Definicje urządzeń zmieniłbyś menu rozwijane" Przyciski "na" Oprogramowanie ". W Android Studio AVD Manager odpowiednikiem jest pole wyboru "Zawiera przyciski sprzętowe (Back/Home/Menu)" w definicji urządzenia. Lub, w pliku 'config.ini' dla definicji AVD (np.' ~/.android/avd /.../ config.ini'), 'hw.mainKeys' musiałby być" no "do emulacji urządzenie bez klawisza MENU. – CommonsWare

4

to rozwiązanie dostarczone przez ban-geoinżynierii jest bardzo Ciekawe ... 3 kropka ikona czasami jeśli używasz androida nie wyświetla: showAsAction namespace android: zamiast niestandardowych nazw jak:

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

Ale rozwiązanie dostarczane przez ban-geoengineering pomaga mi rozwiązać problem z odwracaniem kierunku elementów ActionBar, aby dopasować go do arabskiego układu. Użyłem biblioteki ActionBarRTLizer i standardowe podejście z Android OS 3dots powoduje jakiś błąd, gdy pozycja menu ikony pokrycie siebie czasami (stan bardzo frustratign), ale niestandardowe rozwiązania

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

rozwiązać problem i RTL działa doskonale! :)

Może to również być pomocne, jeśli chcesz obsługiwać przyciski 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); 
    } 
} 

i dodać tutaj: mMenuReference.performIdentifierAction (R.id.menu_0, 1);

w celu zastąpienia Sub Menu wyświetlane jako menu przepełnienia w zależności na przykład od bieżącej działalności można korzystać z tego rozwiązania:

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

Rozwiązanie można znaleźć tutaj https://stackoverflow.com/a/27502405/1808829, która pracowała idealne dla mnie. Nie trzeba pracować z personelem xml, robi się to tylko programowo.

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

wypróbuj to;

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); 
} 
Powiązane problemy