I'm working on an Android app with one MainActivity and three fragments. I've successfully disabled the back button (Up button) in the toolbar, but it still gets rendered in the toolbar. I want to ensure that the back button does not appear at all.
Even though I've disabled the back button using supportActionBar?.setDisplayHomeAsUpEnabled(false) and supportActionBar?.setDisplayShowHomeEnabled(false), it still gets rendered in the toolbar.
Here's the relevant code from my MainActivity:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val toolbar = binding.toolbar
setSupportActionBar(toolbar)
toolbar.navigationIcon = null
toolbar.title = "New Fragment Name"
// Hide the back button (Up button) if it's present
supportActionBar?.setDisplayHomeAsUpEnabled(false)
supportActionBar?.setDisplayShowHomeEnabled(false)
val navController = findNavController(R.id.nav_host_fragment_content_main)
appBarConfiguration = AppBarConfiguration(navController.graph)
setupActionBarWithNavController(navController, appBarConfiguration)
}
override fun onSupportNavigateUp(): Boolean {
/*val navController = findNavController(R.id.nav_host_fragment_content_main)
return navController.navigateUp(appBarConfiguration)
|| super.onSupportNavigateUp()*/
Toast.makeText(this, "Back button disabled", Toast.LENGTH_SHORT).show()
return false
}
What I've Tried: Set toolbar.navigationIcon = null to remove the back button icon. Set supportActionBar?.setDisplayHomeAsUpEnabled(false) to disable the back button functionality. Set supportActionBar?.setDisplayShowHomeEnabled(false) to hide the home button. What I Need: I need to ensure that the back button does not appear in the toolbar at all, regardless of any actions or configurations.
This is my app/src/main/res/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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"
android:fitsSystemWindows="true"
tools:context=".ui.mainActivity.MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" />
</com.google.android.material.appbar.AppBarLayout>
<include layout="@layout/content_main" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
And a screenshot that shows that the back button in the toolbar is still getting rendered
Any help on how to completely remove the back button from the toolbar would be greatly appreciated!
If you use navController.graph
for AppBarConfiguration, it will render back button if the fragment is not startDestination declared in navigation/your_navigation.xml (e.g. app:startDestination="@+id/home"
).
To solve this problem, you can use topLevelDestinationIds
in AppBarConfiguration.
val appBarConfiguration = AppBarConfiguration(
topLevelDestinationIds = setOf(R.id.home, R.id.dashboard, R.id.notifications)
)
topLevelDestinationIds
are fragment ids.