Android:如何在XML定义的菜单项前通过代码添加菜单项?
解决Android代码添加菜单项排在XML项之前的问题
嗨,这个问题其实很好解决,核心在于Android菜单的排序规则——菜单项是根据orderInCategory的数值从小到大排列的,数值越小,位置越靠前。
你现在遇到的情况是:XML里的搜索菜单项如果没显式设置android:orderInCategory,默认值是0;而你代码里用Menu.FIRST作为order参数,这个常量的实际值是1,所以代码添加的项自然会排在XML项的后面。
给你两种可行的解决方案:
方案一:修改代码中的order参数
直接把代码里的order值设为比0小的数(比如-1),这样它的优先级就比XML默认的0更高,会排在前面:
menu.add(0, Menu.FIRST, -1, "Gift box") .setIcon(R.drawable.jingle_bell) .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
方案二:给XML菜单项指定order值
给XML里的搜索项显式设置android:orderInCategory="1",然后代码里的order用0,这样代码项的数值更小,会排在前面:
修改后的XML代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_search" android:icon="@drawable/search" app:showAsAction="ifRoom|collapseActionView" app:actionViewClass="android.support.v7.widget.SearchView" android:title="Search" android:orderInCategory="1"/> <!-- 新增这一行指定排序优先级 --> </menu>
对应的代码:
menu.add(0, Menu.FIRST, 0, "Gift box") .setIcon(R.drawable.jingle_bell) .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
两种方法都能达到你要的效果,选哪种看你个人习惯~ 如果后续还有更多菜单项,记得统一规划orderInCategory的数值,确保排序符合你的预期。
内容的提问来源于stack exchange,提问作者Naruto
相关产品推荐
相关产品推荐

