ActionBar显示OptionsMenu

.在配置菜单的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();
}


你可能感兴趣的:(android)