为什么ActionbarSharelock只显示溢出图标,即使有足够的空间?

8
我在ABS中遇到了菜单项可见性的问题,即使标题栏中有空间。问题是我在不同尺寸的设备上测试,但每种情况下我只能看到一个菜单项,那就是溢出菜单。
我使用onPrepareOptionsMenu动态管理我的菜单,这个方法运行得很完美(但不知道这个问题是由onPrepareOptionsMenu还是其他原因引起的)。
视图差异: enter image description here enter image description here

第一种方法我已经通过编程方式创建了菜单,并使用setShowAsAction()设置了可见性。在某些地方,我也发现了setShowAsActionflag(),我也尝试了那个。但是在这种情况下,在小屏幕320 * 480中无法看到溢出菜单。所以,这是我在编程方法中遇到的问题。

以下是我的代码

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // TODO Auto-generated method stu
    // TO Remove older menu otherwise that will apped menu each time.
    menu.clear();

    menu.add(Menu.NONE, MENU_SEARCH, Menu.NONE, "Search").setIcon(R.drawable.ic_search).setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    menu.add(Menu.NONE, MENU_SETTING, Menu.NONE, "Settings").setIcon(R.drawable.ic_action_settings)
        .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    if (is_session_exist == 1) {
        menu.add(Menu.NONE, MENU_CHANGE_LOGIN, Menu.NONE, "Change Login").setIcon(R.drawable.ic_action_add_person)
            .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

        menu.add(Menu.NONE, MENU_LOGOUT, Menu.NONE, "Logout").setIcon(R.drawable.abs__ic_clear)
            .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);


    } else {
        menu.add(Menu.NONE, MENU_LOGIN, Menu.NONE, "Login").setIcon(R.drawable.ic_action_add_person)
            .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    }
    return super.onPrepareOptionsMenu(menu);
}

第二种方法:我使用XML文件夹创建了菜单,并在单独的文件中设置了所有属性。现在我正在 onPrepareOptionsMenu 中弯曲该菜单,但在这种情况下,即使我已经设置了 android:showAsAction="ifRoom|withText",我只能在任何密度屏幕上看到溢出图标。
这是我的XML代码。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/mainMenu"
        android:icon="@drawable/abs__ic_menu_moreoverflow_holo_dark"
        android:showAsAction="always">
        <menu>
            <item
                android:id="@+id/menu_search"
                android:icon="@drawable/ic_search"
                android:showAsAction="ifRoom|withText"
                android:title="Search"
                android:visible="true"/>
            <item
                android:id="@+id/menu_login"
                android:icon="@drawable/ic_action_add_person"
                android:showAsAction="ifRoom|withText"
                android:title="Login"
                android:visible="true"/>
            <item
                android:id="@+id/menu_change_login"
                android:icon="@drawable/ic_action_add_person"
                android:showAsAction="ifRoom|withText"
                android:title="Change Login"
                android:visible="false"/>
            <item
                android:id="@+id/menu_setting"
                android:icon="@drawable/ic_action_settings"
                android:showAsAction="ifRoom|withText"
                android:title="Setting"
                android:visible="true"/>
            <item
                android:id="@+id/menu_logout"
                android:icon="@drawable/abs__ic_clear"
                android:showAsAction="ifRoom|withText"
                android:title="Logout"
                android:visible="false"/>
        </menu>
    </item>

</menu>

我正在使用setVisible(false/true);onPrepareOptionsMenu中更改菜单项。
这里有一些有用的链接,我已经参考过了,但问题还没有解决。 如何以编程方式设置android:showAsAction="ifRoom|withText" 如何在ActionBar中添加文本到图标中? 我不知道为什么会出现这个问题。您的帮助和努力将会得到赞赏。
谢谢。
2个回答

5
我猜,对于屏幕分辨率为320*480的设备,您将不会看到溢出图标。相反,在单击设备上的菜单按钮时,您可以像下面的图像一样获取其余的菜单项:

enter image description here


太好了,我从来没有注意到那个问题。谢谢 :) 至少我的Java编码完美无缺 :) - Chintan Khetiya

1
你有两个菜单(1)嵌套。
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item..
          ">
        <menu>

应该将所有内容放在单个菜单中,并移除溢出菜单项...它会自动显示。

更新后的菜单 XML

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
            <item
                android:id="@+id/menu_search"
                android:icon="@drawable/ic_search"
                android:showAsAction="ifRoom|withText"
                android:title="Search"
                android:visible="true"/>
            <item
                android:id="@+id/menu_login"
                android:icon="@drawable/ic_action_add_person"
                android:showAsAction="ifRoom|withText"
                android:title="Login"
                android:visible="true"/>
            <item
                android:id="@+id/menu_change_login"
                android:icon="@drawable/ic_action_add_person"
                android:showAsAction="ifRoom|withText"
                android:title="Change Login"
                android:visible="false"/>
            <item
                android:id="@+id/menu_setting"
                android:icon="@drawable/ic_action_settings"
                android:showAsAction="ifRoom|withText"
                android:title="Setting"
                android:visible="true"/>
            <item
                android:id="@+id/menu_logout"
                android:icon="@drawable/abs__ic_clear"
                android:showAsAction="ifRoom|withText"
                android:title="Logout"
                android:visible="false"/>
     </menu>

如果我移除那个,那么我会遇到第一种方法的问题。 - Chintan Khetiya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接