2012-10-13 143 views
7

我升级到版本4.2,发现我的旧代码没有编译,因为它出现的ForceOverflow父主题已被删除。ActionBarSherlock ForceOverflow资源未找到

After Googling this issue它看来,这是故意除去,以保持设备保持一致菜单按键。

我理解使用物理菜单按钮的理由,但我只是不同意它......再加上这些老菜单太难看了。

我真的不希望用户说他们不能访问以前的功能(这毕竟是菜单按钮被移动到屏幕上可见的原因),所以我的选择是什么?这将在未来的版本中改变吗?我是否必须坚持使用以前版本的ABS,并处理旧版ABS库中的一些其他错误,这些错误已在最新版本中修复?有什么解决办法吗?

+0

我决定只用4.1坚持现在...不满意这两种但是很开心与ABS ... – dorjeduck

回答

9

我们可以用SubMenu来伪装它,而不是试图获得一个“真正的”溢出菜单。

它会看起来像和行为像原来的溢出按钮,只是更好,因为它会永远在那里。

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

当然,您可以像以前一样设置子菜单。使用groudID,itemID等

请注意,我已选择* ic_menu_moreoverflow_normal_holo_dark *作为菜单图标。 这样的按钮也会看起来像溢出。

现在我们只需要在用户按下硬件菜单按钮时打开该子菜单。 如果您像我以前那样设置mainMenu和subMenu1,我们可以很容易地做到这一点。

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

当心您导入:

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

import android.view.MenuItem; 
+0

嘿,感谢代码片段,但我面临一个问题。我的主菜单中有一个折叠的搜索视图,每当我按下菜单按钮时,searchview就会展开而不是溢出菜单。 – Asim

+0

也许在你的onKeyUp()方法中,你调用了错误的subMenu。 – Sorcerer