我看不到动作栏中的溢出菜单为什么?

时间:2014-01-20 18:18:38

标签: android android-actionbar overflow-menu

我在android中使用actionbar但它没有显示overflowbar.i我正在尝试作为教程,但它不起作用,虽然我做了同样的错误?我只是想要显示和其他溢出的家。这是menue codei我在android中使用actionbar,但它没有显示overflowbar.i我正在尝试作为教程,但它不起作用,虽然我做了同样的错误?我只想要显示和其他溢出的家。这是menue代码

<item android:id="@+id/Homebar"
    android:title="Home"
    android:orderInCategory="1"
    android:showAsAction="ifRoom"
    />
<item android:id="@+id/infobar"
    android:title="Info"
    android:orderInCategory="2"
    android:showAsAction="ifRoom"
    />
<item android:id="@+id/servicebar"
    android:title="Services"
    android:orderInCategory="2"
    android:showAsAction="ifRoom"
    />
<item android:id="@+id/onlinetoolsbar"
    android:title="Online tools"
    android:orderInCategory="2"
    android:showAsAction="ifRoom"
    />
<item android:id="@+id/mediacenterbar"
    android:title="Media center"
    android:orderInCategory="2"
    android:showAsAction="ifRoom"
    />

4 个答案:

答案 0 :(得分:6)

您可能正在使用带有专用菜单按钮的设备,或带有专用菜单按钮的仿真器。 在Android 4.4之前,如果设备具有专用菜单按钮,Android将不会显示溢出按钮。如果按菜单按钮,则应显示溢出菜单。

Google在Android 4.4 Kitkat中更改了此行为,现在所有设备都会显示溢出按钮。如果您正在使用模拟器,请尝试在Android 4.4模拟器上进行测试。如果您使用专用菜单按钮在真实设备上进行测试,请使用该按钮“召唤”溢出菜单。

编辑:要获得自定义子菜单/溢出菜单,您必须在菜单项中创建单独的菜单。 像这样:

 <item android:id="@+id/Homebar"
    android:title="Home"
    android:orderInCategory="1"
    android:showAsAction="ifRoom"
    >
    <menu>
     <item android:id="@+id/infobar"
         android:title="Info"
        android:orderInCategory="2"
         android:showAsAction="ifRoom"
         />
     <item android:id="@+id/servicebar"
         android:title="Services"
         android:orderInCategory="2"
         android:showAsAction="ifRoom"
         />
     <item android:id="@+id/onlinetoolsbar"
         android:title="Online tools"
         android:orderInCategory="2"
         android:showAsAction="ifRoom"
         />
     <item android:id="@+id/mediacenterbar"
         android:title="Media center"
         android:orderInCategory="2"
         android:showAsAction="ifRoom"
         />
     </menu>  
</item>

答案 1 :(得分:1)

我希望下面的代码对大多数设备都有用,可以显示带溢出菜单的操作栏并使用:

以下方法很容易在大多数设备中显示操作栏溢出菜单,您可以使用&gt; 3.0版本。

我检查过此代码在Android 4.0,4.1,4.2,4.3版本中正常运行。

<强> MainActivity.java

package com.example.actionbaroverflowmenu;

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.WindowManager;

public class MainActivity extends Activity {
private Menu mainMenu;

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.

    super.onCreateOptionsMenu(menu);

    getMenuInflater().inflate(R.menu.main, menu);

    mainMenu = menu;
    return true;
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub

    if(event.getAction() == KeyEvent.ACTION_DOWN){
        switch (keyCode) {
        case KeyEvent.KEYCODE_MENU:
            mainMenu.performIdentifierAction(R.id.action_overflow, 0);
            return true;
        }
    }

    return super.onKeyDown(keyCode, event);
}

}

菜单/ main.xml中

<item
    android:id="@+id/action_locate"
    android:icon="@drawable/ic_action_locate"
    android:orderInCategory="200"
    android:showAsAction="always"/>
<item
    android:id="@+id/action_refresh"
    android:icon="@drawable/ic_action_refresh"
    android:orderInCategory="300"
    android:showAsAction="always"/>
<item
    android:id="@+id/action_overflow"
    android:icon="@drawable/ic_action_overflow"
    android:menuCategory="container"
    android:orderInCategory="400"
    android:showAsAction="always"
    android:visible="true">
    <menu>
        <item
            android:id="@+id/action_refresh"
            android:icon="@drawable/ic_action_refresh"
            android:menuCategory="container"
            android:orderInCategory="100"
            android:showAsAction="always"
            android:title="Refresh"
            android:visible="true"/>
        <item
            android:id="@+id/action_search"
            android:icon="@drawable/ic_action_search"
            android:menuCategory="container"
            android:orderInCategory="200"
            android:showAsAction="always"
            android:title="Search"
            android:visible="true"/>
        <item
            android:id="@+id/action_settings"
            android:icon="@drawable/ic_action_settings"
            android:orderInCategory="300"
            android:showAsAction="always"
            android:title="@string/action_settings"/>

        <item
            android:id="@+id/action_help"
            android:icon="@drawable/ic_action_help"
            android:orderInCategory="400"
            android:showAsAction="always"
            android:title="Help"/>

        <item
            android:id="@+id/action_about"
            android:icon="@drawable/ic_action_about"
            android:orderInCategory="500"
            android:showAsAction="always"
            android:title="About"/>

    </menu>
</item>

从下方链接下载行动栏图标包:Download icon pack

您必须将图标放在drawable文件夹中才能在menu / main.xml文件中使用

答案 2 :(得分:0)

doc

中读取此内容
  

动作溢出

     

操作栏中的操作溢出可以访问应用不常用的操作。具有无菜单硬件密钥的手机上的溢出图标 仅显示 。当用户按下键时,带有菜单键的电话会显示操作溢出

因此,这不是您应用的奇怪行为,这是Android的正常行为,具体取决于您在showAsAction中的menu.xml属性中添加的内容。这还取决于屏幕尺寸和方向。

顺便说一句,有些人使用 hack 来强制显示溢出菜单,但正如我所说的那样,这是一个黑客攻击,所以对你的应用程序来说并不好,并且会引导您到其他设备/版本中的最终错误。看看here以便更好地理解。

如果你真的想在你的应用上使用它而不使用hack,check this solution

答案 3 :(得分:-1)

只有那些项目显示在溢出菜单中,其android:showAsAction设置为&#34; never&#34;。您已将其设置为&#34; ifRoom&#34;对于每个项目。