.在配置菜单的XML文件中,配置菜单项的showAsAction属性即可确定,该菜单项是否显示在ActinBar中
显示OptionsMenu
android:showAsAction属性的取值有:
ifRoom:存在可用空间时显示在ActionBar中;
never 从不显示在ActionBar中;
always始终显示在ActionBar中;
withText当图标和文字同时存在时,尽可能的显示文字;
collapseActionView 控件被折叠到一个按钮中,当用户选择该按钮时展开。例如在
ActionBar中使用SearchView 时应该选择该属性,通常要配合ifRoom使用
以上属性可以组合使用,例如:
android:showAction="collapseActionView|ifRoom"
如果OptionMenu中需显示到ActionBar的菜单项过多,则可能因宽度不再,无法全部显示,默认情况下会在最右侧显示由3个
小点组成的按钮,点击该按钮将可以弹出未能直接显示的菜单项,该位置通常称之为
Overflow Menu即:溢出的菜单
Overflow Menu的按钮仅当ActionBar的空间无法容纳所有需要显示的菜单项时才会
显示,但有些版本或有些模拟器中,也可能不显示,运行以下代码可确保它会在需要的时候必然显示。
(反射机制实现)
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if(menuKeyFild != null){
menuKeyField.setAccessible(true);
menuKeyFiekd.setBoolean(config,false);
}
案例
配置菜单文件:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_login"
android:orderInCategory="100"
android:showAsAction="always"
android:title="登录"/>
<item
android:id="@+id/action_reg"
android:orderInCategory="101"
android:showAsAction="always"
android:title="注册">
<menu>
<item
android:id="@+id/action_reg_phone"
android:orderInCategory="201"
android:showAsAction="never"
android:title="手机注册"/>
<item
android:id="@+id/action_reg_email"
android:orderInCategory="202"
android:showAsAction="never"
android:title="邮箱注册"/>
</menu>
</item>
<item
android:id="@+id/action_help"
android:orderInCategory="102"
android:showAsAction="always"
android:title="帮助"/>
<item
android:id="@+id/action_about"
android:orderInCategory="103"
android:showAsAction="always"
android:title="关于"/>
</menu>
第二步:在MainActivity onCreate方法里面加入
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField;
try {
menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if(menuKeyField != null){
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config,false);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}