永远不会调用onCreateOptionsMenu

Bar*_*chs 53 android oncreateoptionsmenu

我在Android中使用选项菜单时遇到了一些麻烦.我以前构建应用程序,它们都运行良好,但现在菜单没有弹出.

代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    getMenuInflater().inflate(R.menu.activity_video, menu);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

甚至从不调用整个方法(通过设置断点来检查).活动非常简单,只有一个VideoView,OnTouchListener有一套.

我在三星Galaxy 10.1,API等级15,minSDK 15上使用Android 4.0.4.我错过了什么?

Mar*_*res 64

在使用compat库工具栏的最新版本的Android中,这种情况很常见,为了使菜单项显示在工具栏中,您必须执行以下操作:

mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.setSupportActionBar(mToolbar); 做了伎俩! (10认同)

小智 42

首先调用setHasOptionsMenu函数onCreate.该onCreateOptionsMenu系统会自动呼叫.

  • 这仅适用于片段.有关选项菜单和片段的许多其他提示和技巧,请参见此处:http://stackoverflow.com/questions/6279571/fragment-not-receiving-menu-callbacks (10认同)
  • 使用片段时这对我不起作用。- 2017年12月27日 (2认同)

War*_*zit 30

如果您测试的手机上有一个菜单按钮onCreateOptionsMenu,则不会在主题开始时调用:

android:theme="@android:style/Theme.Black.NoTitleBar"

但是当您单击菜单按钮时,onCreateOptionsMenu将调用该按钮.我不知道没有硬件按钮的手机会发生什么......

  • 没有硬件按钮,菜单根本就没有呈现 (3认同)

Ste*_*iaz 23

在方法中:Fragment#onCreateView(...)你应该把:

setHasOptionsMenu(true);
Run Code Online (Sandbox Code Playgroud)

然后你的方法将被调用.

  • 这不是我的活动中的方法。 (2认同)

All*_*len 16

那是因为该活动没有工具栏。

有 2 个步骤可以做到这一点。

首先,您需要在位于 res/layout 的 activity.xml 中添加工具栏

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"">

    <!-- add this part-->
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="?attr/actionBarTheme"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

其次,让您的活动附加它

在 JAVA 中

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Run Code Online (Sandbox Code Playgroud)

或在科特林

val toolbar = findViewById<Toolbar>(R.id.toolbar)
setSupportActionBar(toolbar)
Run Code Online (Sandbox Code Playgroud)