ActionBarSherlock 强制溢出 资源未找到

7

我升级到了4.2版本,发现我的旧代码无法编译,因为似乎已经删除了ForceOverflow父主题。

在搜索该问题后,看起来是有意删除了它,以保持设备一致的菜单按钮。

我确实理解使用物理菜单按钮的论点,但我不同意...而且那些旧菜单太丑陋了。

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


我决定现在只使用4.1版本...虽然对此并不满意,但非常满意ABS... - dorjeduck
1个回答

9

我们可以通过子菜单来模拟“真正”的溢出菜单,而不是试图获取它。

它看起来和行为上都像原始的溢出按钮,只不过更好,因为它总是存在。

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;

嘿,感谢你提供的代码片段,但我遇到了一个问题。我的主菜单中有一个折叠的搜索视图,每当我按下菜单按钮时,该搜索视图就会展开,而不是溢出菜单。 - Asim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接