Chciałbym, aby wszystkie elementy menu, które nie pasują do paska akcji, przechodziły do menu przepełnienia (tego, do którego można dotrzeć z paska akcji, a nie przycisku menu), nawet na urządzeniach, które mają przycisk menu . Wydaje się to o wiele bardziej intuicyjne dla użytkowników niż wrzucenie ich do oddzielnej listy menu, która wymaga od użytkownika przejścia z interakcji dotykowej (ekranowej) do interakcji opartej na przyciskach, ponieważ układ ActionBar nie może zmieścić ich na pasku.
Na emulatorze mogę ustawić wartość „Hardware Back / Home Keys” na „no” i uzyskać ten efekt. Szukałem sposobu, aby to zrobić w kodzie dla rzeczywistego urządzenia, które ma przycisk menu, ale nie może go dobrze. Czy ktoś może mi pomóc?
źródło
Możesz również użyć tego małego hacka tutaj:
Dobrym miejscem na umieszczenie tego byłoby
onCreate
-Method twojej klasy Application.Zmusi to aplikację do wyświetlenia menu przepełnienia. Przycisk menu będzie nadal działał, ale otworzy menu w prawym górnym rogu.
[Edytuj] Ponieważ pojawił się kilka razy: ten hack działa tylko dla natywnego ActionBar wprowadzonego w Androidzie 3.0, a nie ActionBarSherlock. Ten ostatni używa własnej wewnętrznej logiki, aby zdecydować, czy wyświetlić rozszerzone menu. Jeśli używasz ABS, wszystkie platformy <4.0 są obsługiwane przez ABS i dlatego podlegają jego logice. Hack będzie nadal działać na wszystkich urządzeniach z Androidem 4.0 lub nowszym (możesz bezpiecznie zignorować Androida 3.x, ponieważ tak naprawdę nie ma tam żadnych tabletów z przyciskiem menu).
Istnieje specjalny motyw ForceOverflow, który wymusi menu w ABS, ale z pewnością zostanie usunięty w przyszłych wersjach z powodu komplikacji .
źródło
Field
wybierz tenjava.lang.reflect.Field
;)Używam, aby to obejść, definiując moje menu w następujący sposób (również z ikoną ActionBarSherlock używaną w moim przykładzie):
Przyznaję, że może to wymagać ręcznego „zarządzania przepełnieniem” w Twoim xml, ale uznałem to rozwiązanie za przydatne.
Możesz także wymusić na urządzeniu użycie przycisku HW w celu otwarcia rozszerzonego menu w Twojej aktywności:
:-)
źródło
Jeśli używasz paska akcji z biblioteki obsługi (
android.support.v7.app.ActionBar
), użyj następującego:źródło
Tej metodzie zapobiega system Android Developers Design System, ale znalazłem sposób, aby to przekazać:
Dodaj to do pliku menu XML:
Następnie utwórz klasę o nazwie „AppPickActionProvider” i skopiuj do niej następujący kod:
źródło
Cóż, myślę, że Alexander Lucas udzielił (niestety) poprawnej odpowiedzi, więc zaznaczam ją jako „właściwą”. Alternatywną odpowiedzią, którą tutaj dodam, jest po prostu wskazanie nowym czytelnikom tego posta na blogu Android Developers jako dość wyczerpujące omówienie tego tematu z kilkoma konkretnymi sugestiami, jak radzić sobie z kodem podczas przechodzenia z poziomu wyższego niż 11 do nowego paska akcji.
Nadal uważam, że był to błąd projektowy, ponieważ przycisk menu nie zachowywał się jak nadmiarowy przycisk „Przepełnienie akcji” w urządzeniach z włączonym przyciskiem menu jako lepszy sposób na przeniesienie doświadczenia użytkownika, ale w tym momencie woda pod mostem.
źródło
Nie jestem pewien, czy tego właśnie szukasz, ale zbudowałem podmenu w menu ActionBar i ustawiłem jego ikonę tak, aby pasowała do ikony menu przepełnienia. Chociaż nie będzie miał automatycznie wysyłanych do niego elementów (tj. Musisz wybrać to, co jest zawsze widoczne, a co zawsze przepełnione), wydaje mi się, że takie podejście może ci pomóc.
źródło
W aplikacji Gmail, która jest dostarczana z preinstalowaną usługą ICS, przycisk menu jest wyłączony, gdy zaznaczonych jest wiele elementów. Menu przepełnienia jest tutaj „wymuszone” do wywołania przez użycie przycisku przepełnienia zamiast fizycznego przycisku menu. Istnieje biblioteka innej firmy o nazwie ActionBarSherlock, która pozwala „wymusić” menu przepełnienia. Ale to będzie działać tylko na poziomie API 14 lub niższym (przed ICS)
źródło
Jeśli używasz paska narzędzi Toolbar , możesz wyświetlić przepełnienie na wszystkich wersjach i wszystkich urządzeniach, próbowałem na niektórych urządzeniach 2.x, działa.
źródło
Przepraszamy, jeśli ten problem jest martwy.
Oto, co zrobiłem, aby rozwiązać błąd. Poszedłem do układów i stworzyłem dwa zawierające paski narzędzi. Jeden był układem dla sdk w wersji 8, a drugi dla sdk w wersji 21. W wersji 8 użyłem android.support.v7.widget.Toolbar, podczas gdy android.widget.Toolbar w układzie sdk 21.
Następnie nadmuchuję pasek narzędzi w mojej aktywności. Sprawdzam SDK, aby zobaczyć, czy było to 21 lub więcej. Następnie nadymam odpowiedni układ. Zmusza to przycisk sprzętowy do mapowania na faktycznie zaprojektowany pasek narzędzi.
źródło
Dla każdego, kto używa nowego
Toolbar
:źródło