Everything was fine when I implemented the collapsed toolbar until I tried to add an option menu.
This is XML code.
Note: I use fragments, not activities.
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="240dp">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsingToolbarLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background_glass"
app:collapsedTitleGravity="center"
app:collapsedTitleTextAppearance="@font/amaranth_regular"
app:collapsedTitleTextColor="@color/text_onSurface_color"
app:expandedTitleTextAppearance="@font/amaranth_regular"
app:expandedTitleTextColor="@color/text_onSurface_color"
app:layout_scrollFlags="scroll|snap|exitUntilCollapsed"
app:titleCollapseMode="scale"
app:titleEnabled="true"
app:titleTextEllipsize="end"
app:toolbarId="@id/toolbar"
tools:title="Current Weather">
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
this is Kotlin code.
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
binding = FragmentWeatherBinding.inflate(inflater, container, false)
(activity as AppCompatActivity).setSupportActionBar(binding.toolbar)
// Set up the toolbar
val navController = findNavController()
binding.toolbar.setupWithNavController(
navController, AppBarConfiguration(navController.graph)
)
return binding.root
}
Theme.xml
<style name="AppTheme" parent="Theme.Material3.Light.NoActionBar">
For the option menu, I implemented MenuProvider and overrided the following methods:
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.toolbar_weather_menu, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
when (menuItem.itemId) {
R.id.action_settings -> {
Toast.makeText(requireActivity(), "Settings", Toast.LENGTH_LONG).show()
findNavController().navigate(R.id.action_weatherFragment_to_settingsFragment)
}
}
return true
}