setSupportActionBar和toolbar.inflateMenu不能一起使用吗?

时间:2019-09-17 00:18:58

标签: android android-actionbar toolbar android-toolbar

调用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还是不兼容?

1 个答案:

答案 0 :(得分:1)

使用function filterArray(arr1, arr2) { let filterArr = []; arr1.forEach(item => arr2.every( val => val.id !== item.id && val.color !== item.color) && filterArr.push(item)); return filterArr; } 时,是的,不支持单独使用ActionBar API并直接操作工具栏,无论是通过添加菜单还是其他更改来实现。

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

工具栏具有自己的API,用于处理导航按钮(setSupportActionBar会插入其中)。

您可以通过在工具栏中添加向上图标来利用此功能:

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" />