Add additional action buttons using Navigation View
Note
This example is a part of the Navigation SDK Examples. You can find the values for all referenced resources in the res
directory. For example, see res/values/strings.xml
for R.string.*
references used in this example.
<?xml version="1.0" encoding="utf-8"?><com.mapbox.navigation.dropin.NavigationViewxmlns:app="http://schemas.android.com/apk/res-auto"xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/navigationView"android:layout_width="match_parent"android:layout_height="match_parent"app:accessToken="@string/mapbox_access_token" />
package com.mapbox.navigation.examples.preview.dropinui import android.os.Bundleimport android.view.Viewimport android.widget.Toastimport androidx.annotation.DrawableResimport androidx.appcompat.app.AppCompatActivityimport com.mapbox.navigation.dropin.ViewBinderCustomizationimport com.mapbox.navigation.dropin.actionbutton.ActionButtonDescriptionimport com.mapbox.navigation.examples.preview.Rimport com.mapbox.navigation.examples.preview.databinding.MapboxActivityCustomActionButtonBindingimport com.mapbox.navigation.ui.base.view.MapboxExtendableButton /*** The example demonstrates how to use [ViewBinderCustomization] to add additional action buttons* to the list of existing action buttons.** Before running the example make sure you have put your access_token in the correct place* inside [app-preview/src/main/res/values/mapbox_access_token.xml]. If not present then add* this file at the location mentioned above and add the following content to it** <?xml version="1.0" encoding="utf-8"?>* <resources xmlns:tools="http://schemas.android.com/tools">* <string name="mapbox_access_token"><PUT_YOUR_ACCESS_TOKEN_HERE></string>* </resources>** The example uses replay location engine to facilitate navigation without physically moving.** How to use the example:* - Start the example* - Grant the location permissions if not already granted*/class AddActionButtonsActivity : AppCompatActivity() { private lateinit var binding: MapboxActivityCustomActionButtonBinding override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = MapboxActivityCustomActionButtonBinding.inflate(layoutInflater)setContentView(binding.root) binding.navigationView.customizeViewBinders {customActionButtons = listOf(ActionButtonDescription(customActionButton(R.drawable.mapbox_ic_settings),ActionButtonDescription.Position.START),ActionButtonDescription(customActionButton(R.drawable.mapbox_ic_feedback),ActionButtonDescription.Position.END))}} private fun customActionButton(@DrawableRes image: Int): View {// The example adds `MapboxExtendableButton`, but you can inflate any custom view you wantreturn MapboxExtendableButton(context = this).apply {this.setState(MapboxExtendableButton.State(image))containerView.setPadding(10.dp, 13.dp, 10.dp, 13.dp)setOnClickListener {Toast.makeText(context, "Action button clicked", Toast.LENGTH_SHORT).show()}}} private val Number.dp get() = com.mapbox.android.gestures.Utils.dpToPx(toFloat()).toInt()}