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