Android 我看不到actionbar中的溢出菜单为什么?

Android 我看不到actionbar中的溢出菜单为什么?,android,android-actionbar,overflow-menu,Android,Android Actionbar,Overflow Menu,我在安卓系统中使用actionbar,但它没有显示溢出条。我作为教程尝试,但它不起作用,尽管我做了同样的事情,但有什么错?我只想在家中显示溢出条,其他的都显示溢出条。这是菜单代码我在安卓系统中使用actionbar,但它没有显示溢出条。我作为教程尝试,但它不起作用虽然我也做了同样的事情,但有什么不对?我只想在家里显示,其他的则显示在溢出区。这是菜单代码 <item android:id="@+id/Homebar" android:title="Home" android:

我在安卓系统中使用actionbar,但它没有显示溢出条。我作为教程尝试,但它不起作用,尽管我做了同样的事情,但有什么错?我只想在家中显示溢出条,其他的都显示溢出条。这是菜单代码我在安卓系统中使用actionbar,但它没有显示溢出条。我作为教程尝试,但它不起作用虽然我也做了同样的事情,但有什么不对?我只想在家里显示,其他的则显示在溢出区。这是菜单代码

<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"
    />


您可能正在使用带有专用菜单按钮的设备,或者使用带有专用菜单按钮的模拟器。 在Android 4.4之前,如果设备有专用的菜单按钮,Android不会显示溢出按钮。如果按下菜单按钮,溢出菜单应出现

谷歌在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>

您可能正在使用带有专用菜单按钮的设备,或者使用带有专用菜单按钮的模拟器。 在Android 4.4之前,如果设备有专用的菜单按钮,Android不会显示溢出按钮。如果按下菜单按钮,溢出菜单应出现

谷歌在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>

从以下位置阅读:

操作溢出

操作栏中的操作溢出提供了对应用程序不太常用的操作的访问。溢出图标仅在没有菜单硬件键的手机上出现。带有菜单键的手机在用户按键时显示动作溢出`

因此,这不是你的应用程序的奇怪行为,这是android的正常行为,取决于你在
menu.xml
中输入的
showAsAction
属性。它还取决于屏幕大小和方向

顺便说一句,有些人使用黑客来强制显示溢出菜单,但正如我所说的,这是一种黑客行为,对你的应用程序不好,最终会导致你在其他设备/版本中出现bug。看一看,以便更好地理解

如果您真的想在应用程序中使用它而不使用黑客,请阅读以下内容:

操作溢出

操作栏中的操作溢出提供了对应用程序不太常用的操作的访问。溢出图标仅在没有菜单硬件键的手机上出现。带有菜单键的手机在用户按键时显示动作溢出`

因此,这不是你的应用程序的奇怪行为,这是android的正常行为,取决于你在
menu.xml
中输入的
showAsAction
属性。它还取决于屏幕大小和方向

顺便说一句,有些人使用黑客来强制显示溢出菜单,但正如我所说的,这是一种黑客行为,对你的应用程序不好,最终会导致你在其他设备/版本中出现bug。看一看,以便更好地理解


如果你真的想在应用程序中使用它而不使用hack,.

只有那些android:showAsAction设置为“从不”的项目才会显示在溢出菜单中。您已为每个项目将其设置为“ifRoom”。

只有那些项目显示在溢出菜单中,其android:showAsAction设置为“从不”。您已为每个项目将其设置为“ifRoom”。

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

下面这种方式很容易在大多数设备中显示操作栏溢出菜单,您可以使用>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>


从以下链接下载操作栏图标包:


您必须在drawable文件夹中放置图标,以便在menu/main.xml文件中使用

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

下面这种方式很容易在大多数设备中显示操作栏溢出菜单,您可以使用>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>


从以下链接下载操作栏图标包:


您必须在drawable文件夹中放置图标,以便在menu/main.xml文件中使用,而不是使用
android:showAsAction=“ifRoom”
,将您希望始终折叠的项目的“ifRoom”更改为“collapseActionView”(即,仅显示在溢出中)。不要像那样使用
android:showAsAction=“ifRoom”
,将“ifRoom”更改为“collapseActionView”,用于您希望始终折叠的项目(即,仅显示在溢出中)。不,不这样工作我正在使用4.3模拟程序我不知道出了什么问题,它现在让我很生气:(它在安卓4.3上按预期工作。模拟程序默认有一个菜单按钮,所以