2012-10-13 1 views
7

Ho eseguito l'aggiornamento alla versione 4.2 e ho rilevato che il mio vecchio codice non è stato compilato perché sembra che il tema principale di ForceOverflow sia stato rimosso.Risorsa ActionBarSherlock ForceOverflow non trovata

After Googling this issue sembra che la si è deliberatamente rimossi per mantenere dispositivi pulsanti del menu coerenti.

Capisco l'argomento per l'utilizzo del pulsante del menu fisico, ma non sono d'accordo con esso ... in più è così dannatamente brutto quei vecchi menu.

Non voglio davvero che gli utenti dichiarino di non poter accedere alle funzionalità precedenti (che dopotutto è il motivo per cui i pulsanti dei menu sono stati spostati per essere visibili sullo schermo), quindi quali sono le mie opzioni qui? Sarà cambiato in una versione futura? Devo attenermi a una versione precedente di ABS e gestire altri bug nelle vecchie librerie ABS che sono state corrette nelle versioni recenti? C'è qualche problema?

+0

ho deciso di aderire solo con 4.1 per ora ... non contento di questa operazione ma molto felice con ABS ... – dorjeduck

risposta

9

Invece di cercare di ottenere un "vero" menu di overflow, possiamo simularlo con un sottomenu.

Apparirà e si comporterà come il pulsante di overflow originale, solo meglio perché sarà sempre lì.

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

Ovviamente è possibile impostare i sottomenu proprio come prima. Con groudID, itemID ecc.

Nota che ho già scelto * ic_menu_moreoverflow_normal_holo_dark * come icona del menu. In questo modo anche il pulsante apparirà come un overflow.

Ora abbiamo solo bisogno di questo sottomenu per aprire quando l'utente ha premuto il pulsante del menu hardware. Possiamo farlo molto facilmente se si imposta mainMenu e subMenu1 come ho fatto prima.

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

Attenzione che si importa:

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

e non:

import android.view.MenuItem; 
+0

Ehi, grazie per lo snippet di codice, ma sto affrontando un problema. Ho una searchview compressa nel mio menu principale e ogni volta che premo il tasto menu, quel searchview si espande piuttosto che il menu di overflow. – Asim

+0

Forse nel tuo metodo onKeyUp(), chiami il subMenu sbagliato. – Sorcerer