这里主要使用的是Material 的MaterialToolbar,首先把App主题设置为NoActionBar
创建Menu
在res
下创建menu
文件夹,在文件夹里面创建toolbar_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/toolbar_menu_disable"
android:icon="@drawable/ic_edge_to_edge_disable_24dp"
android:title="add"
app:showAsAction="always"/>
<item
android:id="@+id/toolbar_menu_edit"
android:icon="@drawable/ic_edit_vd_theme_24dp"
android:title="add"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/toolbar_menu_fav"
android:icon="@drawable/ic_favorite_vd_theme_24px"
android:title="add"
app:showAsAction="never"/>
</menu>
always
始终展示在工具栏上
ifRoom
如果空间足够就展示在状态栏上,不然就折叠
never
始终折叠
使用menu
布局文件中使用
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
style="@style/Widget.MaterialComponents.Toolbar.Surface"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:menu="@menu/toolbar_menu"
app:layout_constraintTop_toTopOf="parent" />
代码中使用
在activity中重写onCreateOptionsMenu
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.toolbar_menu, menu)
return super.onCreateOptionsMenu(menu)
}
在activity中绑定toolbar
setSupportActionBar(binding.toolbar1)
对菜单事件处理
在activity中重写onOptionsItemSelecte
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home ->
finish()
R.id.toolbar_menu_disable ->
showSnackBar("disable")
R.id.toolbar_menu_edit ->
showSnackBar("edit")
R.id.toolbar_menu_fav ->
showSnackBar("favorite")
}
return super.onOptionsItemSelected(item)
}
不依赖于activity
通过编码也可以设置toolbar的各种状态和事件,此时可以不用设置setSupportActionBar
toolbar2.apply {
title = "DemoTitle"
setTitleTextColor(ContextCompat.getColor(this@ActionBarDemoActivity, R.color.teal_200))
isTitleCentered = true
setNavigationIcon(R.drawable.ic_close_vd_theme_24px)
setNavigationOnClickListener { finish() }
setOnMenuItemClickListener {
when (it.itemId) {
R.id.toolbar_menu_disable ->
showSnackBar("disable")
}
false
}
}
布局中设置样式
属性 | 作用 |
---|---|
app:menu | 设置添加菜单 |
app:navigationIcon | 设置左侧的图标 |
app:title | 设置标题 |
app:titleTextColor | 设置标题颜色 |
app:subtitle | 子标题 |
app:subtitleTextColor | 子标题颜色 |
app:titleCentered | 标题是否居中 |
app:subtitleCentered | 副标题是否居中 |
app:titleTextAppearance | 标题字体样式,可以设置尺寸 |
android:elevation | 设置阴影 |
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar2"
style="@style/Widget.MaterialComponents.Toolbar.Surface"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
app:menu="@menu/toolbar_menu1"
app:navigationIcon="@drawable/ic_close_vd_theme_24px"
app:title="@string/app_name"
app:titleTextColor="@color/teal_200"
app:subtitleTextColor="@color/purple_700"
app:subtitle="@string/app_name"
app:titleCentered="false"
app:subtitleCentered="true"
app:titleTextAppearance="@style/TextAppearance.MaterialComponents.Body1"
app:subtitleTextAppearance="@style/TextAppearance.MaterialComponents.Body2"
android:elevation="5dp"
app:layout_constraintTop_toBottomOf="@id/toolbar1" />