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
}
调用 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
}