2012-10-13 14 views
7

Zaktualizowałem do wersji 4.2 i odkryłem, że mój stary kod nie został skompilowany, ponieważ wygląda na to, że motyw macierzysty ForceOverflow został usunięty.Nie znaleziono zasobu ActionBarSherlock ForceOverflow

After Googling this issue wydaje się, że został celowo usunięte w celu utrzymania urządzeń zgodnych przycisków menu.

Rozumiem argument za używaniem przycisku menu fizycznego, ale po prostu się z tym nie zgadzam ... plus jest tak cholernie brzydko w tych starych menu.

Naprawdę nie chcę, aby użytkownicy mówili, że nie mogą uzyskać dostępu do poprzedniej funkcjonalności (co jest przecież powodem, dla którego przyciski menu zostały przeniesione, aby były widoczne na ekranie), więc jakie są moje opcje? Czy to się zmieni w przyszłym wydaniu? Czy muszę trzymać się poprzedniej wersji ABS i radzić sobie z kilkoma innymi błędami w starych bibliotekach ABS, które zostały naprawione w ostatnich wersjach? Czy jest jakaś praca?

+0

postanowiłem po prostu trzymać się z 4,1 do teraz ... nie zadowolony z tego albo ale bardzo szczęśliwy z ABS ... – dorjeduck

Odpowiedz

9

Zamiast próbować uzyskać "prawdziwe" menu z przepełnieniem, możemy sfałszować je za pomocą SubMenu.

Będzie wyglądać i zachowywać się jak oryginalny przycisk przepełnienia, tylko lepiej, ponieważ zawsze będzie tam.

private Menu mainMenu; 
private SubMenu subMenu1; 

    @Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    mainMenu = menu; 

    subMenu1 = menu.addSubMenu(""); 
    subMenu1.add("Settings"); 
    subMenu1.add("About"); 
    subMenu1.add("Help"); 

    MenuItem subMenu1Item = subMenu1.getItem(); 
    subMenu1Item.setIcon(R.drawable.ic_menu_moreoverflow_normal_holo_dark); 
    subMenu1Item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

    return super.onCreateOptionsMenu(menu); 
} 

Oczywiście można ustawić subMenus tak jak wcześniej. Z groudID, itemID itp.

Pamiętaj, że wybrałem już * ic_menu_moreoverflow_normal_holo_dark * jako ikonę menu. W ten sposób przycisk będzie również wyglądać jak przepełnienie.

Teraz potrzebujemy tego podmenu do otwarcia, gdy użytkownik nacisnął przycisk menu sprzętowego. Możemy to zrobić bardzo łatwo, jeśli wcześniej ustawiliśmy menu główne i podmenu1.

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_MENU) { 
      mainMenu.performIdentifierAction(subMenu1.getItem().getItemId(), 0); 
      return true; 
    } 
    return super.onKeyUp(keyCode, event); 
} 

Pamiętaj, że importujesz:

import com.actionbarsherlock.view.SubMenu; 
import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuItem; 

i nie:

import android.view.MenuItem; 
+0

Hej, dzięki za fragment kodu, ale mam problem. Mam zwinięty widok wyszukiwania w moim menu głównym, a po naciśnięciu przycisku menu ten widok rozszerza się, a nie menu przepełnienia. – Asim

+0

Być może w Twojej metodzie onKeyUp() wywołujesz niewłaściwe podmenu. – Sorcerer

Powiązane problemy