2

我在 ListActivity 上设置的 ActionBar 有一个奇怪的问题。

这是我用来设置菜单的 XML:

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

<item 
   android:id="@+id/menu_search"
   android:title="@string/search_filter"
   android:icon="@drawable/ic_search"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_start_date"
   android:title="@string/date_filter"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_end_date"
   android:title="@string/date_filter"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_filters"
   android:title="@string/filters"
   android:icon="@drawable/ic_filter"
   android:showAsAction="always|withText">

  <menu>
        <item 
            android:id="@+id/menu_ratings"
            android:title="@string/ratings"
            android:icon="@drawable/ic_star"
            android:showAsAction="always|withText" />
        <item 
            android:id="@+id/menu_emotions"
            android:title="@string/emotions"
            android:icon="@drawable/ic_smi2"
            android:showAsAction="always|withText" />
        <item 
            android:id="@+id/menu_categories"
            android:title="@string/categories"
            android:icon="@drawable/ic_folder"
            android:showAsAction="always|withText" />
 </menu>

 <item 
   android:id="@+id/menu_search_order"
   android:title="@string/search_order"    
   android:icon="@drawable/ic_search_order"
   android:showAsAction="ifRoom|withText" />     
</item>

</menu>

菜单项menu_searchmenu_start_datemenu_end_date子菜单menu_filters运行良好,但无法menu_search_order从物理菜单按钮获取菜单(按下按钮时没有任何反应)。

所以我做了一个小测试,看看问题是否来自子菜单,我更改了代码并注释了子菜单部分:

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

<item 
   android:id="@+id/menu_search"
   android:title="@string/search_filter"
   android:icon="@drawable/ic_search"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_start_date"
   android:title="@string/date_filter"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_end_date"
   android:title="@string/date_filter"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_filters"
   android:title="@string/filters"
   android:icon="@drawable/ic_filter"
   android:showAsAction="always|withText">

  <!-- <menu>
        <item 
            android:id="@+id/menu_ratings"
            android:title="@string/ratings"
            android:icon="@drawable/ic_star"
            android:showAsAction="always|withText" />
        <item 
            android:id="@+id/menu_emotions"
            android:title="@string/emotions"
            android:icon="@drawable/ic_smi2"
            android:showAsAction="always|withText" />
        <item 
            android:id="@+id/menu_categories"
            android:title="@string/categories"
            android:icon="@drawable/ic_folder"
            android:showAsAction="always|withText" />
 </menu> -->

 <item 
   android:id="@+id/menu_search_order"
   android:title="@string/search_order"    
   android:icon="@drawable/ic_search_order"
   android:showAsAction="ifRoom|withText" />     
</item>

</menu>

进行此更改后,菜单运行良好,并且当我按下物理菜单按钮时会显示该选项。

所以我的问题是:为什么子菜单会阻止我的最后一个菜单出现在第一种情况下?

谢谢!

4

2 回答 2

0

我仍然不知道为什么我的问题中的代码不起作用,但我找到了最终使它起作用的技巧。

我只是将可选菜单(最初位于底部)移到 XML 文件中的子菜单之前:

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

<item 
   android:id="@+id/menu_search"
   android:title="@string/search_filter"
   android:icon="@drawable/ic_search"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_start_date"
   android:title="@string/date_filter"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_end_date"
   android:title="@string/date_filter"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_search_order"
   android:title="@string/search_order"    
   android:icon="@drawable/ic_search_order"
   android:showAsAction="ifRoom|withText" />

<item 
   android:id="@+id/menu_filters"
   android:title="@string/filters"
   android:icon="@drawable/ic_filter"
   android:showAsAction="always|withText">

<menu>
        <item 
            android:id="@+id/menu_ratings"
            android:title="@string/ratings"
            android:icon="@drawable/ic_star"
            android:showAsAction="always|withText" />
        <item 
            android:id="@+id/menu_emotions"
            android:title="@string/emotions"
            android:icon="@drawable/ic_smi2"
            android:showAsAction="always|withText" />
        <item 
            android:id="@+id/menu_categories"
            android:title="@string/categories"
            android:icon="@drawable/ic_folder"
            android:showAsAction="always|withText" />
 </menu>

</item>

</menu>

这里的顺序并不重要,因为这个菜单是我唯一需要通过物理菜单按钮看到的。

于 2013-05-18T06:47:37.797 回答
0

因此,经过多次尝试,我找到了一种方法如何使这些项目正确显示在任何地方。所以诀窍是将所有项目与一些 id 组合元素,而且android:checkableBehavior="single",这是我能够让它按照 xml 中定义的方式呈现的唯一方法。如果我从第一组中删除 id,最后两项将合并到以前的菜单子项。相当有问题的 android 菜单实现。应该在某个地方报告,但希望其他人会这样做。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group
        android:id="@+id/signup_1_identification_group"
        android:checkableBehavior="single">
        <item
            android:id="@+id/dopkkpokadad"
            android:title="@string/signup_1_identification" />
    </group>
    <item
        android:id="@+id/kokopj"
        android:title="@string/signup_6_nationality">
        <menu android:id="@+id/signup_6_nationality_menu">
            <group
                android:id="@+id/signup_6_nationality_group"
                android:checkableBehavior="single">
                <item
                    android:id="@+id/dadceqpovjopeqad"
                    android:title="Hlavna" />
                <item
                    android:id="@+id/cionno"
                    android:title="Dalsia" />
                <item
                    android:id="@+id/dkbvyukbadad"
                    android:title="Materinsky Jazyk" />
            </group>
        </menu>
    </item>
    <group
        android:id="@+id/signup_last_group"
        android:checkableBehavior="single">
        <item
            android:id="@+id/dafeqpokopqdad"
            android:title="@string/signup_7_religion" />
        <item
            android:id="@+id/dakopefhpoiueqdad"
            android:title="@string/signup_8_finalization" />
    </group>
</menu>

这是从这个 xml 正确呈现它的方式:

这是正确渲染的方式

当我从第一个组中删除 id 时,我得到了错误的行为,最后两个项目被合并,在某些情况下它们会消失或发生其他奇怪的事情,具体取决于其他布局更改,我相信 android 菜单实现只是错误...

当我从拳头组中删除 id 时,我得到了错误的行为:

于 2020-06-28T22:36:51.367 回答