Android 工具栏菜单未显示在所有活动中

Android Toolbar Menu Not Displaying on All Activities

我创建了一个工具栏和一个出现在工具栏上的“三点菜单”。在我的 HomeActivity 中,显示菜单。但是,在其他活动中,菜单没有(但工具栏有)。我不确定这里发生了什么。

这是toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@color/colorPrimary"
    android:elevation="4dp"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"

    app:popupTheme="@style/Theme.AppCompat.Light">

</androidx.appcompat.widget.Toolbar>

这是应该显示三点菜单的 settings_menu.xml。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item android:id="@+id/item2"
        android:title="Item 2"
        app:showAsAction="never" />

    <item android:id="@+id/item3"
        android:title="Item 3"
        app:showAsAction="never">

        <menu>

            <item android:id="@+id/subitem1"
                android:title="Sub Item 1"/>

            <item android:id="@+id/subitem2"
                android:title="Sub Item 2"/>

        </menu>

    </item>

</menu>

这是 HomeActivity 的 onCreate() 方法,菜单确实出现在此处。

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// deactivate the fullscreen mode used by the splash screen
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

setContentView(R.layout.activity_home);

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

tvClients = findViewById(R.id.tvClients);
tvClientList = findViewById(R.id.tvClientList);
tvClientName = findViewById(R.id.tvClientName);

buttonSettings = findViewById(R.id.buttonSettings);
buttonLogout = findViewById(R.id.buttonLogout);
buttonCreateNewClient = findViewById(R.id.buttonCreateNewClient);

// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();

这是另一个 activity 的 onCreate() 方法,通过在 HomeActivity 中单击按钮访问,菜单按钮不会出现。

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_new_client);

toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Create New Client");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

etClientFirstName = findViewById(R.id.etClientFirstName);
etClientLastName = findViewById(R.id.etClientLastName);
etClientAge = findViewById(R.id.etClientAge);

buttonCreateClient = findViewById(R.id.buttonCreateClient);
buttonCreateClient.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        createClient();
    }
});

// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();
}

您必须在每个 activity 中覆盖 onCreateOptionsMenu 您需要在

中显示菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.settings_menu, menu);
    // return true so that the menu pop up is opened
    return true; 
}

查看此 thread 了解完整详情