Hướng dẫn này chỉ cho bạn cách thêm bản đồ với kiểu tuỳ chỉnh vào thiết bị Android . Hướng dẫn này sử dụng chế độ ban đêm làm một ví dụ về định kiểu tuỳ chỉnh.
Với các tùy chọn kiểu, bạn có thể tùy chỉnh bản trình bày của bản đồ Google tiêu chuẩn phong cách, thay đổi giao diện trực quan của các đối tượng địa lý như đường phố, công viên, doanh nghiệp, và các địa điểm ưa thích khác. Điều này có nghĩa là bạn có thể nhấn mạnh thành phần cụ thể của bản đồ hoặc làm cho bản đồ bổ trợ cho phong cách của .
Kiểu chỉ hoạt động trên loại bản đồ normal
. Kiểu không ảnh hưởng
bản đồ trong nhà.
Lấy mã
Sao chép hoặc tải kho lưu trữ Mẫu Google Maps Android API v2 xuống từ GitHub.
Thiết lập dự án phát triển
Làm theo các bước sau để tạo dự án hướng dẫn trong Android Studio.
- Tải và cài đặt Android Studio.
- Thêm gói Dịch vụ Google Play vào Android Studio.
- Sao chép hoặc tải kho lưu trữ Mẫu API Google Maps cho Android phiên bản 2 xuống nếu bạn chưa làm như vậy khi bắt đầu đọc hướng dẫn này.
Nhập dự án hướng dẫn:
- Trong Android Studio, hãy chọn File > New > Import Project (Tệp > Mới > Nhập dự án).
- Chuyển đến vị trí bạn đã lưu Mẫu API Android phiên bản 2 của Google Maps sau khi tải xuống.
- Tìm dự án StyledMap tại vị trí này:
PATH-TO-SAVED-REPO/android-samples/tutorials/StyledMap
- Chọn thư mục dự án, sau đó nhấp vào OK. Android Studio hiện sẽ tạo dự án của bạn bằng công cụ bản dựng Gradle.
Lấy khoá API và bật các API cần thiết
Để hoàn tất hướng dẫn này, bạn cần có một khoá API Google được uỷ quyền sử dụng SDK Maps cho Android.
Nhấp vào nút bên dưới để nhận khoá và kích hoạt API.
Để biết thêm thông tin, hãy xem hướng dẫn Lấy khoá API.
Thêm khoá API vào ứng dụng
- Chỉnh sửa tệp
gradle.properties
của dự án. Dán khoá API vào giá trị của thuộc tính
GOOGLE_MAPS_API_KEY
. Thời gian bạn tạo ứng dụng, Gradle sẽ sao chép khoá API vào phiên bản Android của ứng dụng tệp kê khai.GOOGLE_MAPS_API_KEY=PASTE-YOUR-API-KEY-HERE
Tạo và chạy ứng dụng
- Kết nối thiết bị Android với máy tính. Làm theo hướng dẫn bật tuỳ chọn cho nhà phát triển trên thiết bị Android thiết bị và định cấu hình hệ thống của bạn để phát hiện thiết bị. (Ngoài ra, bạn có thể sử dụng Trình quản lý thiết bị Android ảo (AVD) để định cấu hình thiết bị ảo. Khi chọn một trình mô phỏng, hãy nhớ chọn hình ảnh có chứa các API của Google. Để biết thêm thông tin, hãy xem hướng dẫn bắt đầu sử dụng.)
- Trong Android Studio, hãy nhấp vào tuỳ chọn trình đơn Run (Chạy) (hoặc biểu tượng nút phát). Chọn một thiết bị theo lời nhắc.
Android Studio gọi Gradle để tạo ứng dụng, sau đó chạy ứng dụng trên trên thiết bị hoặc trên trình mô phỏng. Bạn sẽ thấy bản đồ có tối (chế độ ban đêm) tương tự như hình ảnh trên trang này.
Gỡ rối:
- Nếu bạn không thấy bản đồ, hãy kiểm tra xem bạn đã lấy được khoá API và thêm khoá đó vào ứng dụng, như đã mô tả ở trên. Kiểm tra nhật ký trong Android Trình theo dõi Android của Studio để phát hiện các thông báo lỗi về khoá API.
- Sử dụng Công cụ gỡ lỗi của Android Studio để xem nhật ký và gỡ lỗi ứng dụng.
Tìm hiểu mã nguồn
Phần này của hướng dẫn giải thích các phần quan trọng nhất của StyledMap, để giúp bạn hiểu cách tạo một ứng dụng tương tự.
Thêm tài nguyên chứa đối tượng kiểu JSON
Thêm một tài nguyên vào dự án phát triển, chứa các nội dung khai báo kiểu ở định dạng JSON. Bạn có thể sử dụng tài nguyên thô hoặc chuỗi, như trong các ví dụ bên dưới.
Tài nguyên thô
Xác định tài nguyên thô trong /res/raw/style_json.json
, chứa
nội dung khai báo kiểu JSON cho việc định kiểu ở chế độ ban đêm:
Tài nguyên chuỗi
Xác định một tài nguyên chuỗi trong /res/values/style_strings.xml
,
chứa nội dung khai báo kiểu JSON để định kiểu ở chế độ ban đêm. Chiến dịch này
hướng dẫn sử dụng tên chuỗi style_json
. Ngang bằng
tệp này, bạn cần sử dụng dấu gạch chéo ngược để thoát khỏi dấu ngoặc kép:
Truyền một đối tượng kiểu JSON vào bản đồ của bạn
Để tạo kiểu cho bản đồ của bạn, hãy gọi GoogleMap.setMapStyle()
truyền một tham số
Đối tượng MapStyleOptions
chứa kiểu của bạn
nội dung khai báo ở định dạng JSON.
Tài nguyên thô
Mã mẫu sau đây giả định dự án của bạn chứa tài nguyên thô
có tên là 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))); } }
Bố cục (activity_maps_raw.xml
) có dạng như sau:
Tài nguyên chuỗi
Mã mẫu sau đây giả định dự án của bạn có chứa một tài nguyên chuỗi
có tên là 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))); } }
Bố cục (activity_maps_string.xml
) sẽ có dạng như sau:
Tìm hiểu thêm về nội dung khai báo kiểu JSON
Bản đồ được tạo kiểu sử dụng hai khái niệm để áp dụng màu sắc và các thay đổi khác về kiểu cho ánh xạ:
- Bộ chọn chỉ định các thành phần địa lý mà bạn có thể
kiểu trên bản đồ. Các đối tượng này bao gồm đường, công viên, vùng nước, v.v. cũng như nhãn của các đối tượng đó. Bộ chọn bao gồm các tính năng
và phần tử, được chỉ định là
featureType
và Tài sảnelementType
. - Trình tạo kiểu là các thuộc tính màu sắc và chế độ hiển thị mà bạn có thể áp dụng cho các phần tử bản đồ. Mã này xác định màu hiển thị thông qua một tổ hợp các giá trị màu sắc, màu sắc và độ sáng/gamma.
Xem tài liệu tham khảo về kiểu để biết mô tả chi tiết về Tuỳ chọn định kiểu JSON.
Trình hướng dẫn tạo kiểu trên Nền tảng Maps
Sử dụng Trình hướng dẫn tạo kiểu trên nền tảng Maps như một cách nhanh chóng để tạo đối tượng định kiểu JSON. SDK Bản đồ dành cho Android hỗ trợ các nội dung khai báo kiểu giống như API JavaScript của Bản đồ.
Bước tiếp theo
Xem cách ẩn đối tượng trên bản đồ bằng cách tạo kiểu.