setSupportActionBar 和 toolbar.inflateMenu 不能一起工作?

setSupportActionBar and toolbar.inflateMenu don't work together?

调用 setSupportActionBar 并按如下方式扩充菜单导致不显示菜单:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(myToolbar)
        supportActionBar?.setDisplayHomeAsUpEnabled(true)
        myToolbar.inflateMenu(R.menu.my_menu)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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"
    tools:context=".MainActivity">

    <androidx.appcompat.widget.Toolbar
            android:id="@+id/myToolbar"
            android:layout_width="0dp"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
<?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/test"
        android:title="Test"
        app:showAsAction="always" />
</menu>

我知道替代方法是使用传统的 onCreateOptionsMenu 方法。 另一种选择是删除行 setSupportActionBar,但我需要显示 displayHomeAsUpEnabled。

是否可以同时使用myToolbar.inflateMenu()setSupportActionBar或者不兼容?

当您使用 setSupportActionBar() 时,是的,您必须单独使用 ActionBar API,并且不支持直接操作工具栏,无论是通过添加菜单还是其他更改。

如果您不想使用 ActionBar API,则不要调用 setSupportActionBar 并直接使用 Toolbar API(无论如何 ActionBar API 都会调用这些 API,因此 Toolbar API 是一个超集已经有 ActionBar API)。

工具栏有自己的 API 来处理导航按钮(这是 displayHomeAsUpEnabled 插入的内容)。

您可以通过将向上图标添加到您的工具栏来利用这一点:

<androidx.appcompat.widget.Toolbar
  android:id="@+id/myToolbar"
  android:layout_width="0dp"
  android:layout_height="?attr/actionBarSize"
  android:background="?attr/colorPrimary"
  app:layout_constraintEnd_toEndOf="parent"
  app:layout_constraintStart_toStartOf="parent"
  app:layout_constraintTop_toTopOf="parent"
  app:navigationIcon="?attr/homeAsUpIndicator" />

然后您可以通过设置点击侦听器在按下按钮时获得回调:

myToolbar.setNavigationOnClickListener {
  // handle the navigation button
}