溢出菜单显示为android appcompat中的上下文菜单

时间:2013-11-29 14:30:02

标签: android menu android-actionbar-compat

我正在使用android-support-v7-appcompat来向后兼容,因为我想在我的应用程序中使用ActionBar。我已经添加了菜单。

这是我的menu.xml

   <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:DetailsPage="http://schemas.android.com/apk/res-auto" >

   <!--  <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"/> -->
    <item
        android:id="@+id/menu_item_search"
        DetailsPage:actionViewClass="android.support.v7.widget.SearchView"
        DetailsPage:showAsAction="always"
        android:icon="@drawable/abc_ic_search"
        android:title="Search Products">
    </item>
    <item
        android:id="@+id/root_menu"
        DetailsPage:showAsAction="always"
        android:icon="@drawable/abc_ic_menu_moreoverflow_normal_holo_light"
        android:title="More">
        <menu>
            <item
                android:id="@+id/menu_Home"
                DetailsPage:showAsAction="ifRoom|withText"
                android:icon="@drawable/abc_ic_search"
                android:showAsAction="ifRoom|withText"
                android:title="Home"/>
            <item
                android:id="@+id/menu_favourite"
                DetailsPage:showAsAction="ifRoom|withText"
                android:icon="@drawable/abc_ic_search"
                android:showAsAction="ifRoom|withText"
                android:title="favourite"/>
            <item
                android:id="@+id/menu_Balance"
                DetailsPage:showAsAction="ifRoom|withText"
                android:icon="@drawable/abc_ic_search"
                android:showAsAction="ifRoom|withText"
                android:title="Balance"/>
            <item
                android:id="@+id/menu_logout"
                android:icon="@drawable/abc_ic_search"
                DetailsPage:showAsAction="ifRoom|withText"
                android:showAsAction="ifRoom|withText"
                android:title="Logout"/>
        </menu>
    </item>

</menu>

在我的活动中,我使用ActionBarActivity和

扩展了我的活动

这是我的onCreateOptionsMenu ::

public boolean  onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.menu, menu);
}

目前点击菜单项时,它显示为::

enter image description here

此处菜单显示在2.3.3中,但作为我不想要的上下文菜单。

我想要的是(在4.2.2中捕获)

enter image description here

上面编写的代码完美地运行并给我想要的结果,我也可以设置图像和menuitem,但是如果我在2.3中运行相同的代码,相同的代码会给我菜单作为上下文菜单。

所以我错过了什么? 我需要做什么改变才能实现2.3中我想要的输出,我得到的是3.0 +?

希望我的问题很明确......

任何帮助/链接将不胜感激....

提前致谢....

编辑::(在应用commonsware的答案之后)

修改menu.xml(我希望我理解正确)

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:DetailsPage="http://schemas.android.com/apk/res-auto" >

    <item
        android:id="@+id/menu_item_search"
        DetailsPage:actionViewClass="android.support.v7.widget.SearchView"
        DetailsPage:showAsAction="never"
        android:icon="@drawable/abc_ic_search"
        android:title="Search Products">
    </item>
    <item
        android:id="@+id/menu_Home"
        DetailsPage:showAsAction="never"
        android:icon="@drawable/abc_ic_search"
        android:showAsAction="ifRoom|withText"
        android:title="Home"/>
    <item
        android:id="@+id/menu_favourite"
        DetailsPage:showAsAction="never"
        android:icon="@drawable/abc_ic_search"
        android:showAsAction="ifRoom|withText"
        android:title="favourite"/>
    <item
        android:id="@+id/menu_Balance"
        DetailsPage:showAsAction="never"
        android:icon="@drawable/abc_ic_search"
        android:showAsAction="ifRoom|withText"
        android:title="Balance"/>
    <item
        android:id="@+id/menu_logout"
        DetailsPage:showAsAction="never"
        android:icon="@drawable/abc_ic_search"
        android:showAsAction="ifRoom|withText"
        android:title="Logout"/>

</menu>

输出::

enter image description here

2 个答案:

答案 0 :(得分:1)

我有一个类似的问题,我解决它的方式是使用自定义命名空间,例如:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_settings"
        android:title="@string/settings"
        app:showAsAction="ifRoom|withText" />
    <item
        android:id="@+id/action_logout"
        android:title="@string/logout"
        app:showAsAction="always|withText" />
</menu>

但我不知道这是解决方案还是解决方法。

答案 1 :(得分:0)

第1步:移除图标为<item>

"@drawable/abc_ic_menu_moreoverflow_normal_holo_light

步骤2:将上述菜单项子菜单中的<item>元素移动到主<menu>元素

步骤3:对于那些您想要始终出现在溢出中的人,请使用DetailsPage:showAsAction="never"

你已经完成了。

溢出不是子菜单。溢出是常规操作栏的一部分,这就是您的子菜单干扰您的结果的原因。

相关问题