【问题标题】:ActionBarSherlock ForceOverflow resource not found找不到 ActionBarSherlock ForceOverflow 资源
【发布时间】:2012-10-15 10:50:02
【问题描述】:

我升级到 4.2 版,发现我的旧代码没有编译,因为它似乎 ForceOverflow 父主题已被删除。

After Googling this issue 似乎是为了保持设备一致的菜单按钮而故意将其删除。

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

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

【问题讨论】:

  • 我决定暂时坚持使用 4.1 ... 对此也不满意,但对 ABS 非常满意 ...

标签: android actionbarsherlock


【解决方案1】:

我们可以使用 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;

【讨论】:

  • 嘿,感谢代码 sn-p,但我遇到了一个问题。我的主菜单中有一个折叠的搜索视图,每当我按下菜单按钮时,该搜索视图就会展开而不是溢出菜单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
  • 2015-05-03
  • 2013-01-03
  • 2014-03-20
  • 2015-04-13
  • 2021-07-06
相关资源
最近更新 更多