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

ome*_*ega 6 android overflow android-actionbar 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>
Run Code Online (Sandbox Code Playgroud)

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

表现

    <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>
Run Code Online (Sandbox Code Playgroud)

eOn*_*nOe 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);
}
Run Code Online (Sandbox Code Playgroud)

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

xmlns:**yourapp**="http://schemas.android.com/apk/res-auto"
Run Code Online (Sandbox Code Playgroud)

3 - 将showAsAction设置为alwaysifRoom

**yourapp**:showAsAction="ifRoom"
Run Code Online (Sandbox Code Playgroud)

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" />
Run Code Online (Sandbox Code Playgroud)

在你的活动上

@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);
}
Run Code Online (Sandbox Code Playgroud)


Rak*_*ari 7

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

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

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

<item ... 
      android:icon="@drawable/abs__ic_menu_moreoverflow_holo_dark">
  <menu>    
   <item .../>
   <item .../>
  </menu>
</item>
Run Code Online (Sandbox Code Playgroud)


Com*_*are 1

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

这就是溢出。

另外,当我的菜单文件中有 3 个项目时,为什么只出现 1 个选项?

因为另外两个在操作栏中。您指定了ifRoom,并且有两个人的空间,而不是三个人。