Android选项菜单未显示。

18

我是Android新手,一直在尝试添加一个简单的添加按钮,如下所述:

list_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:id="@+id/menu_insert"
        android:icon="@android:drawable/ic_menu_add"
        android:title="@string/menu_insert"              
    />     
</menu>

MyActivity.java

@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.list_menu, menu);

        return true;  
    }

我在《Dummies系列》的书中读到,ic_menu_add已经存在于资源中,我不需要添加它,但当我运行此代码时,它没有显示出来。我尝试添加一个同名的自定义图标,但仍然没有按钮。有人能帮帮我吗?


你把这个布局文件放在了位于res文件夹内的menu文件夹中吗? - Dehan Wjiesekara
2
你是否偶然忘记按下手机上的菜单按钮以显示选项菜单了? - kta
如果您在活动中使用工具栏,请不要忘记调用 setSupportActionBar() - Hendra Anggrian
10个回答

17

如果您使用片段,则需要在onCreate()中添加以下内容:

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

这种方法还存在吗?如果存在的话,它属于哪个类别? - undefined

9
我曾经遇到过同样的问题...阅读了一些查询和文档...希望这能帮到你。
以下是我的菜单XML文件。
<item
    android:id="@+id/action_send_feedback"
    android:orderInCategory="100"
    android:showAsAction="always"
    android:title="@string/action_send_feedback"/>

<item 
    android:id="@+id/action_share_app"
    android:orderInCategory="100"
    android:showAsAction="ifRoom"
    android:title="@string/action_share_app"
    android:icon="@drawable/ic_action_share" />

<item
    android:id="@+id/action_rate_app"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:title="@string/action_rate_app"/>

以下是JAVA代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

对于具有选项按钮(在手机底部)的Android手机,当按下该按钮时,showAsAction =“never”的菜单项将显示...否则它们将正常显示在操作栏选项菜单中。
参考:http://developer.android.com/guide/topics/ui/menus.html#options-menu

3
不需要调用super()方法。尝试使用以下onCreateOptionsMenu替换:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.list_menu, menu);
    return true;
}

你正在使用碎片吗?请检查下面Roel的答案是否正确,对我很有用。 - geniushkg

3

对我来说,我需要在activity的xml文件中添加以下代码:

 <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimary"
        android:theme="@style/AppTheme"
        app:popupTheme="@style/Theme.AppCompat.Light.DarkActionBar"
        app:title="@string/app_name"
        app:titleMarginStart="24dp"
        app:titleTextColor="@android:color/white" />

接下来是activity.java文件:

onCreate函数

Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

并且

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

并且片段的onCreate:

 setHasOptionsMenu(true);

1

如果您在清单中将TargetSDK设置为5,则图标将显示出来。

如果您的目标是更新的Android SDK(3.0及以上),操作栏会接管菜单,并默认情况下不显示图标。

您可以尝试这个:

如何在ActionBar溢出菜单中显示图标?


是的,那个方法可行,但我不想在操作栏中显示它,它应该在屏幕底部,请指导一下,谢谢。 - user3119647
我建议首先使用标准UI。你的第二个最佳选择可能是在清单中针对较低的sdk(如9),而你最不好的选择是在活动布局中创建自己的菜单,当菜单按钮被按下时,这些视图会变得可见和不可见(https://dev59.com/SW855IYBdhLWcg3wnFxO)。最后一个选项是一个坏主意,因为如果设备没有菜单按钮(有些设备没有),你就没办法了。 - MikeHelland

1
我遇到了这个问题。但在我的情况下,我已经将工具栏添加到Framelayout中。在其顶部,我又添加了一个match parent的ScrollView。现在ScrollView控制了点击,而不是工具栏。因此,如果您正在使用FrameLayout,则应该将工具栏放在最上面的视图。请注意,保留html标签。

0

嗨,希望下面的代码对你有所帮助:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primaryDark</item>
    </style>

请在Android清单文件中将DarkActionBar作为您使用的主题提及。

0

你的 XML 文件中是否错过了这些行,请检查一下。

xmlns:tools="http://schemas.android.com/tools"

tools:context=".MainActivity"

如果你错过了这个,就会导致选项菜单无法显示。


0
如果在您的活动中没有显示出来,请确保在活动的onCreate()方法中调用setSupportActionBar(R.id.my_toolbar)。

0

添加

app:showAsAction="always"

转换为菜单项。


1
已经有相当多的答案了,您能否详细说明您的答案有何不同,并可能添加一些更多的示例代码? - cloned
这不是推荐的做法!你应该始终使用“ifRoom”。 - bashizip

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