Z tego samouczka dowiesz się, jak dodać do aplikacji na Androida mapę ze stylem niestandardowym. W samouczku jako przykład stylu niestandardowego użyto trybu nocnego.
Dzięki opcjom stylu możesz dostosować wygląd standardowych stylów map Google, zmieniając wizualne wyświetlanie elementów takich jak drogi, parki, firmy i inne ciekawe miejsca. Oznacza to, że możesz wyróżnić określone elementy mapy lub dopasować mapę do stylu aplikacji.
Styl działa tylko na mapie typu normal. Styl nie ma wpływu na Mapy obiektów.
Pobierz kod
Sklonuj lub pobierz repozytorium przykładów Google Maps Android API v2 z GitHuba.
Konfigurowanie projektu programistycznego

Aby utworzyć projekt samouczka w Android Studio, wykonaj te czynności.
- Pobierz i zainstaluj Android Studio.
- Dodaj pakiet usług Google Play do Android Studio.
- Sklonuj lub pobierz repozytorium przykładów Google Maps Android API v2, jeśli nie zostało to zrobione przed rozpoczęciem czytania tego samouczka.
Zaimportuj projekt samouczka:
- W Android Studio wybierz File > New > Import Project (Plik > Nowy > Importuj projekt).
- Otwórz lokalizację, w której zostało zapisane pobrane repozytorium przykładów Google Maps Android API v2.
- Projekt StyledMap znajdziesz w tej lokalizacji:
PATH-TO-SAVED-REPO/android-samples/tutorials/StyledMap - Wybierz katalog projektu, a następnie kliknij OK. Android Studio skompiluje teraz projekt za pomocą narzędzia Gradle.
Uzyskiwanie klucza interfejsu API i włączanie niezbędnych interfejsów API
Aby wykonać zadania z tego samouczka, musisz mieć klucz interfejsu API Google, który jest autoryzowany do korzystania z pakietu Maps SDK na Androida.
Kliknij przycisk poniżej, aby uzyskać klucz i aktywować interfejs API.
Więcej informacji znajdziesz w przewodniku Pobieranie klucza interfejsu API.
Dodawanie klucza interfejsu API do aplikacji
- Zmodyfikuj plik
gradle.propertiesprojektu. Wklej klucz interfejsu API jako wartość właściwości
GOOGLE_MAPS_API_KEY. Podczas kompilowania aplikacji Gradle kopiuje klucz interfejsu API do pliku manifestu aplikacji na Androida.GOOGLE_MAPS_API_KEY=PASTE-YOUR-API-KEY-HERE
Tworzenie i uruchamianie aplikacji
- Podłącz urządzenie z Androidem do komputera. Postępuj zgodnie z instrukcjami, aby włączyć opcje programisty na urządzeniu z Androidem i skonfigurować system tak, aby wykrywał urządzenie. (Możesz też skonfigurować urządzenie wirtualne za pomocą menedżera urządzenia wirtualnego z Androidem (AVD). Wybierając emulator, upewnij się, że wybierasz obraz, który zawiera interfejsy API Google. Więcej informacji znajdziesz w przewodniku dla początkujących).
- W Android Studio kliknij opcję menu Uruchom (lub ikonę przycisku odtwarzania). Wybierz urządzenie zgodnie z instrukcjami.
Android Studio wywołuje Gradle, aby skompilować aplikację, a następnie uruchamia ją na urządzeniu lub w emulatorze. Powinna wyświetlić się mapa w stylu ciemnym (tryb nocny), podobna do obrazu na tej stronie.
Rozwiązywanie problemów:
- Jeśli nie widzisz mapy, sprawdź, czy masz klucz interfejsu API i czy został on dodany do aplikacji w sposób opisany powyżej. Sprawdź, czy w Android Monitor w Android Studio nie ma komunikatów o błędach dotyczących klucza interfejsu API.
- Użyj narzędzi do debugowania w Android Studio, aby wyświetlić logi i debugować aplikację.
Zrozumienie kodu
W tej części samouczka wyjaśniamy najważniejsze elementy aplikacji StyledMap, aby pomóc Ci zrozumieć, jak utworzyć podobną aplikację.
Dodawanie zasobu zawierającego obiekt stylu JSON
Dodaj do projektu programistycznego zasób zawierający deklaracje stylu w formacie JSON. Możesz użyć zasobu niezdefiniowanego lub ciągu tekstowego, jak pokazano w przykładach poniżej.
Zasób nieprzetworzony
Zdefiniuj zasób niezdefiniowany w pliku /res/raw/style_json.json, zawierający deklarację stylu JSON dla trybu nocnego:
Zasób tekstowy
Zdefiniuj zasób tekstowy w pliku /res/values/style_strings.xml zawierający deklarację stylu JSON dla trybu nocnego. W tym samouczku używana jest nazwa ciągu tekstowego style_json. W tym pliku musisz użyć ukośnika lewego, aby uniknąć cudzysłowów:
Przekazywanie obiektu stylu JSON do mapy
Aby nadać styl mapie, wywołaj GoogleMap.setMapStyle(), przekazując obiekt MapStyleOptions zawierający deklaracje stylu w formacie JSON.
Zasób nieprzetworzony
W tym przykładowym kodzie założono, że projekt zawiera zasób niezdefiniowany o nazwie style_json:
// Copyright 2020 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.example.styledmap; import android.content.res.Resources; import android.os.Bundle; import android.util.Log; import androidx.appcompat.app.AppCompatActivity; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MapStyleOptions; /** A styled map using JSON styles from a raw resource. */ public class MapsActivityRaw extends AppCompatActivity implements OnMapReadyCallback { private static final String TAG = MapsActivityRaw.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Retrieve the content view that renders the map. setContentView(R.layout.activity_maps_raw); // Get the SupportMapFragment and register for the callback // when the map is ready for use. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); } /** * Manipulates the map when it's available. The API invokes this callback when the map is ready * for use. */ @Override public void onMapReady(GoogleMap googleMap) { try { // Customise the styling of the base map using a JSON object defined // in a raw resource file. boolean success = googleMap.setMapStyle( MapStyleOptions.loadRawResourceStyle(this, R.raw.style_json)); if (!success) { Log.e(TAG, "Style parsing failed."); } } catch (Resources.NotFoundException e) { Log.e(TAG, "Can't find style. Error: ", e); } // Position the map's camera near Sydney, Australia. googleMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(-34, 151))); } }
Układ (activity_maps_raw.xml) wygląda tak:
Zasób tekstowy
W tym przykładowym kodzie założono, że projekt zawiera zasób tekstowy o nazwie style_json:
package com.example.styledmap; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MapStyleOptions; /** * A styled map using JSON styles from a string resource. */ public class MapsActivityString extends AppCompatActivity implements OnMapReadyCallback { private static final String TAG = MapsActivityString.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Retrieve the content view that renders the map. setContentView(R.layout.activity_maps_string); // Get the SupportMapFragment and register for the callback // when the map is ready for use. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } /** * Manipulates the map when it's available. * The API invokes this callback when the map is ready for use. */ @Override public void onMapReady(GoogleMap googleMap) { // Customise the styling of the base map using a JSON object defined // in a string resource file. First create a MapStyleOptions object // from the JSON styles string, then pass this to the setMapStyle // method of the GoogleMap object. boolean success = googleMap.setMapStyle(new MapStyleOptions(getResources() .getString(R.string.style_json))); if (!success) { Log.e(TAG, "Style parsing failed."); } // Position the map's camera near Sydney, Australia. googleMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(-34, 151))); } }
Układ (activity_maps_string.xml) wygląda tak:
Więcej informacji o deklaracjach stylu JSON
Mapy z własnym stylem wykorzystują 2 koncepcje, aby stosować kolory i inne zmiany stylu na mapie:
- Selektory określają komponenty geograficzne, które można stylizować na mapie. Obejmują one drogi, parki, zbiorniki wodne i inne elementy, a także ich etykiety. Selektory obejmują cechy i elementy określone jako właściwości
featureTypeielementType. - Style to właściwości kolorów i widoczności, które można stosować do elementów mapy. Określają one wyświetlany kolor za pomocą kombinacji odcienia, koloru, jasności i wartości gamma.
Szczegółowy opis opcji stylów JSON znajdziesz w dokumentacji stylów.
Kreator stylu Maps Platform
Aby szybko wygenerować obiekt stylów JSON, użyj kreatora stylu Map Platform. Pakiet Maps SDK na Androida obsługuje te same deklaracje stylów co interfejs Maps JavaScript API.
Następny krok
Dowiedz się, jak ukrywać funkcje na mapie za pomocą stylów.





