2012-10-13 7 views
7

Ich habe auf Version 4.2 aktualisiert und festgestellt, dass mein alter Code nicht kompiliert wurde, da das übergeordnete ForceOverflow-Thema entfernt wurde.ActionBarSherlock ForceOverflow-Ressource nicht gefunden

After Googling this issue es scheint, dass die es bewusst Gerät konsistent Menütasten zu halten, wurde entfernt.

Ich verstehe das Argument für die Verwendung der physischen Menü-Taste, aber ich stimme einfach nicht damit überein ... und es ist so verdammt hässlich diese alten Menüs.

Ich möchte wirklich nicht, dass Benutzer sagen, dass sie nicht auf vorherige Funktionalität zugreifen können (was schließlich der Grund ist, warum die Menütasten verschoben wurden, um auf dem Bildschirm sichtbar zu sein). Was sind meine Optionen hier? Wird dies in einer zukünftigen Version geändert werden? Muss ich bei einer früheren Version von ABS bleiben und mit einigen anderen Fehlern in den alten ABS-Bibliotheken umgehen, die in den letzten Versionen behoben wurden? Gibt es Arbeit?

+0

ich beschlossen, nur mit 4.1-Stick jetzt ... nicht glücklich über diese entweder, aber sehr glücklich mit ABS ... – dorjeduck

Antwort

9

Anstatt zu versuchen, ein "echtes" Überlaufmenü zu erhalten, können wir es mit einem SubMenu vortäuschen.

Es sieht aus und verhält sich wie der ursprüngliche Überlaufknopf, nur besser, weil es immer da sein wird.

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); 
} 

Natürlich können Sie den SubMenus genauso einstellen wie zuvor. Mit groudeID, itemID etc.

Beachten Sie, dass ich als Menü-Icon bereits * ic_menu_moreoverflow_normal_holo_dark * gewählt habe. Auf diese Weise sieht die Schaltfläche auch wie ein Überlauf aus.

Jetzt brauchen wir nur dieses Untermenü zu öffnen, wenn der Benutzer die Hardware-Taste gedrückt hat. Wir können das sehr einfach machen, wenn Sie wie zuvor mainMenu und subMenu1 einstellen.

@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); 
} 

Beachten Sie, dass Sie importieren:

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

und nicht:

import android.view.MenuItem; 
+0

Hey, danke für das Code-Snippet, aber ich stehe vor einem Problem. Ich habe eine komprimierte Suchansicht in meinem Hauptmenü und wann immer ich die Menüschaltfläche drücke, wird diese Suchansicht erweitert und nicht das Überlaufmenü. – Asim

+0

Vielleicht rufen Sie in Ihrer OnKeyUp() -Methode das falsche SubMenu auf. – Sorcerer

Verwandte Themen