Style Switching (Android)
Switch between SmartMaps styles at runtime, for example to support dark mode.
MapSession required
Remember to integrate the MapSession in your app. The MapSession must be called periodically every 10 minutes while the map is active.
Automatic Dark Mode
import android.content.res.Configuration
class MainActivity : AppCompatActivity() {
private lateinit var mapView: MapView
private val apiKey = "[INSERT API-KEY]"
private fun getStyleUrl(): String {
val isDarkMode = resources.configuration.uiMode and
Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES
val styleName = if (isDarkMode) "dark" else "light"
return "https://tiles.smartmaps.cloud/styles/v1/smartmaps/$styleName/style.json?apiKey=$apiKey&channel=app"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
MapLibre.getInstance(this)
setContentView(R.layout.activity_main)
mapView = findViewById(R.id.mapView)
mapView.onCreate(savedInstanceState)
mapView.getMapAsync { map ->
map.setStyle(getStyleUrl())
map.cameraPosition = CameraPosition.Builder()
.target(LatLng(49.0069, 8.4037))
.zoom(12.0)
.build()
}
}
// Re-apply style when configuration changes
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
mapView.getMapAsync { map ->
map.setStyle(getStyleUrl())
}
}
// Lifecycle methods
override fun onStart() { super.onStart(); mapView.onStart() }
override fun onResume() { super.onResume(); mapView.onResume() }
override fun onPause() { super.onPause(); mapView.onPause() }
override fun onStop() { super.onStop(); mapView.onStop() }
override fun onDestroy() { super.onDestroy(); mapView.onDestroy() }
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
mapView.onSaveInstanceState(outState)
}
override fun onLowMemory() { super.onLowMemory(); mapView.onLowMemory() }
}
Style Picker with Buttons
mapView.getMapAsync { map ->
map.setStyle(
"https://tiles.smartmaps.cloud/styles/v1/smartmaps/light/style.json?apiKey=$apiKey&channel=app"
)
val styles = mapOf(
R.id.btnLight to "light",
R.id.btnDark to "dark",
R.id.btnGrey to "grey",
R.id.btnEssential to "essential",
R.id.btnAccessible to "accessible",
R.id.btnSatellite to "satellite"
)
styles.forEach { (buttonId, styleName) ->
findViewById<Button>(buttonId).setOnClickListener {
map.setStyle(
"https://tiles.smartmaps.cloud/styles/v1/smartmaps/$styleName/style.json?apiKey=$apiKey&channel=app"
)
}
}
}