【问题标题】:ActionBar fragment menu items. Putting them in frontActionBar 片段菜单项。把它们放在前面
【发布时间】:2012-05-07 08:14:01
【问题描述】:

我正在使用 onCreateOptionsMenu 成功添加片段菜单项...

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.additional_fragment_menu, menu);
}

上面的这个附加菜单包括 1 个菜单项。我需要做的是将此菜单项放在所有其他现有项的前面,以便它首先出现在操作栏上。目前它出现在最后。

(这是我要添加的 android:showAsAction="always" 项)

我尝试以编程方式添加它,但 MenuItem 对象中没有允许您指定图标和 showAsAction 标志的选项。

有人有什么想法吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    好的,我自己用 EvilDuck 指向正确方向的指针破解了这个问题。是的dymmeh你是对的,你可以通过编程来做到这一点!

    我需要使用orderInCategorymenuCategory 的组合。如果您没有指定 menuCategory,Android 似乎会忽略 orderInCategory

    • 我通过将menuCategory 属性值设置为"system" 来指定应用程序中每个菜单项的类别。
    • 我的基本菜单项(通过 Activity 加载的那些)我必须设置较高的 orderInCategory 数字,例如 10、11、12、13 等。
    • 然后,当我膨胀并添加具有相同类别和 orderInCategory 值 1 的附加片段菜单 xml 时,它显示为第一项。

    【讨论】:

    • 我将 back 菜单项用于由活动本身膨胀的类别 'secondary' 并且没有类别用于 front 我的片段的项目。它可以工作(使用 2.3.7 - 4.4 的模拟器测试)。未使用类别属性中的订单。
    【解决方案2】:

    尝试在菜单项上使用“android:orderInCategory”属性

    【讨论】:

    • 奇怪...帮助我在 ActionBar 中重新排序项目
    • 查看我的答案(下/上)。感谢您的帮助。
    • @EvilDuck 谢谢。不仅仅是菜单项,它也适用于菜单组。我将所有主机活动的菜单项分组到一个组中,然后将android:orderInCategory 设置为 999(例如)。所有项目都显示在菜单的底部(在片段之后)。
    • 我可以从代码中设置 orderInCategory,而不是在 xml 中吗?我正在以编程方式创建菜单项,它们总是显示第一个(在 xml 中创建的菜单项之前),我希望它们最后显示..
    【解决方案3】:

    我不确定您在哪里无法以编程方式设置 showAsAction 选项或图标 例如:

    public void onCreateOptionsMenu(Menu menu)
    {
        menu.add(Menu.NONE,  /** group ID.. not really needed unless you're working with groups **/
                  0,         /** this is the items ID (get this in onOptionsItemSelected to determine what was clicked) **/
                  Menu.NONE, /** ORDER.. this is what you want to change **/
                  "Cancel") /** title **/
                  .setIcon(R.drawable.ic_menu_cancel)
                  .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    }
    

    文档:

    menu.add(int groupId, int itemId, int order, CharSequence title)

    setShowAsAction(int actionEnum)

    setIcon(int resId)

    【讨论】:

    • 是的。他正在使用片段 + 操作栏,这意味着他正在使用 API 11+ 或 API 4+ 的兼容性库。两者都有我描述的方法
    • 很公平,尽管 Compat 库有不同的实用程序类方法来设置菜单项上的 showAsAction。
    • 是的,我注意到在查看我在项目中使用的代码时。不过功能上是一样的。只是返回类型和参数不同。
    【解决方案4】:

    一切都正确,只需在 onCreateView 中使用下面一行代码。

    setHasOptionsMenu(true);
    

    【讨论】:

      猜你喜欢
      • 2012-12-17
      • 2017-06-01
      • 2020-07-07
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 2020-11-15
      相关资源
      最近更新 更多