Android支持操作栏没有显示溢出菜单

时间:2013-12-20 23:59:13

标签: android android-actionbar overflow android-support-library

我的Android应用程序支持2.2及更高版本。我正在使用appcompat支持库作为操作栏,所以它只应显示是否有不适合的东西。我希望我的操作栏支持溢出按钮(三个垂直方块),在单击时显示其他项目的菜单。

在我的菜单文件中,我设置了三个项目。但是在应用程序上我只看到其中两个,并且溢出按钮也没有显示。

activity_menu.xml

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

    <item
        android:id="@+id/action_settings"
        android:icon="@drawable/checkbox"
        android:title="@string/action_settings"
        sord.ids_connect:showAsAction="ifRoom" />

    <item
        android:id="@+id/action_settings2"
        android:icon="@drawable/checkbox_checked"
        android:title="@string/action_settings"
        sord.ids_connect:showAsAction="ifRoom" />

    <item
        android:id="@+id/action_settings3"
        android:icon="@drawable/ic_launcher"
        android:title="@string/action_settings"
        sord.ids_connect:showAsAction="ifRoom" />  

</menu>

java文件

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;

public class Activity_Menu extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);

        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_menu, menu);
        //return true;
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                super.onBackPressed();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

清单

    <activity
        android:theme="@style/Theme.AppCompat.Light.DarkActionBar"
        android:name="sord.ids_connect.Activity_Menu"
        android:screenOrientation="portrait"
        android:label="@string/title_activity_menu" >
    </activity>

7 个答案:

答案 0 :(得分:14)

一般参考

1 - 覆盖onCreateOption并使菜单膨胀

注意

如果你返回true或者调用super

并不重要
@Override

public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_menu, menu);
    return super.onCreateOptionsMenu(menu);
}

2 - 将命名空间添加到menu.xml文件中。

xmlns:**yourapp**="http://schemas.android.com/apk/res-auto"

3 - 将showAsAction设置为始终 ifRoom

**yourapp**:showAsAction="ifRoom"

4 - 如果您使用的是appcompat,请确保您的Activity扩展 ActionBarActivity ,您不必更改ActionBar的任何值,以便能够在栏中看到menuOption。

最后你会有类似的东西[记得为 yourapp 使用正确的命名空间]

  

main.xml中

<item
    android:id="@+id/action_settings"
    android:icon="@drawable/ic_action_settings"
    android:title="@string/action_settings"
    yourapp:showAsAction="ifRoom" />

您的活动

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return super.onCreateOptionsMenu(menu);
}

答案 1 :(得分:7)

如果您正在使用支持库,则需要从您自己的命名空间声明showAsAction;看起来像app:showAsAction。您可以参考eOnOe的答案。

使用android:showAsAction将无法使用支持库,因为它使用了自己的操作栏实现,而不是框架的实现。

您还可以始终将项目分组到图标中,例如:

<item ... 
      android:icon="@drawable/abs__ic_menu_moreoverflow_holo_dark">
  <menu>    
   <item .../>
   <item .../>
  </menu>
</item>

答案 2 :(得分:2)

只有当您的设备没有菜单按钮时,Android才会显示溢出菜单。当然你可以为每个设备创建hack默认设置,但它不是推荐的解决方案。并为您的每件商品添加android:showAsAction="never",如果您没有菜单按钮,则表示您的设备会显示溢出菜单。

答案 3 :(得分:1)

  

我正在手机上测试,当我按下菜单按钮时,我看到菜单显示在底部,只有一个选项显示“设置”

那就是溢出。

  

为什么当我在菜单文件中有3个项目时,只有1个选项出现在那里?

因为其他两个都在操作栏中。您指定了ifRoom,并且有两个空间,而不是三个。

答案 4 :(得分:0)

您需要菜单菜单布局如下

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:sord.ids_connect="http://schemas.android.com/apk/res-auto">
<item
    android:id="@+id/action_container"
    android:title="Menu"
    android:showAsAction="never">        
<item
    android:id="@+id/action_settings"
    android:icon="@drawable/checkbox"
    android:title="@string/action_settings"
    sord.ids_connect:showAsAction="ifRoom" />

<item
    android:id="@+id/action_settings2"
    android:icon="@drawable/checkbox_checked"
    android:title="@string/action_settings"
    sord.ids_connect:showAsAction="ifRoom" />

<item
    android:id="@+id/action_settings3"
    android:icon="@drawable/ic_launcher"
    android:title="@string/action_settings"
    sord.ids_connect:showAsAction="ifRoom" />  
</item>

</menu> 

答案 5 :(得分:0)

     Change Your menu.xml with the following code.




    <menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:sord.ids_connect="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_container"
        android:title="Menu"
       android:showAsAction="always">        
    <item
        android:id="@+id/action_settings"
        android:icon="@drawable/checkbox"
        android:title="@string/action_settings"
        android:showAsAction="always"/>

    <item
        android:id="@+id/action_settings2"
        android:icon="@drawable/checkbox_checked"
        android:title="@string/action_settings"
        android:showAsAction="always" />

    <item
        android:id="@+id/action_settings3"
        android:icon="@drawable/ic_launcher"
        android:title="@string/action_settings"
        android:showAsAction="always" />  
    </item>

    </menu> 

答案 6 :(得分:-2)

我遇到了同样的问题。我解决了它:

1)评论return true;

2)取消注释return super.onKeyUp(keyCode, event);

在公开boolean onKeyUp(int keyCode, KeyEvent event)