Chủ đề này mô tả cách định cấu hình bản đồ đã được thêm vào ứng dụng Android bằng cách sử dụng SDK Maps dành cho Android.
Tổng quan
Sau khi thêm bản đồ vào ứng dụng, bạn có thể định cấu hình chế độ cài đặt ban đầu và thời gian chạy của bản đồ. Bạn cần định cấu hình các chế độ cài đặt ban đầu dựa trên việc bạn thêm vùng chứa bản đồ (
SupportMapFragment
hay MapView
) theo phương thức tĩnh hay động. Nếu vùng chứa bản đồ đã được thêm tĩnh, bạn có thể định cấu hình chế độ cài đặt bản đồ ban đầu trong tệp bố cục.
Nếu đã thêm linh động thì bạn có thể định cấu hình các chế độ cài đặt ban đầu trong lệnh gọi lại OnCreate
bằng đối tượng GoogleMapOptions
.
Để biết thông tin chi tiết về cách thêm một vùng chứa bản đồ, hãy xem Thêm bản đồ.
Cài đặt bản đồ ban đầu bao gồm:
- Vị trí máy ảnh, bao gồm: vị trí, thu phóng, đeo và nghiêng. Hãy xem phần Máy ảnh và chế độ xem để biết thông tin chi tiết về vị trí của máy ảnh.
- Loại bản đồ.
- Các thành phần giao diện người dùng để hiển thị, chẳng hạn như nút thu phóng và la bàn.
- Cử chỉ để bật.
- Liệu chế độ lite có được bật hay không.
Trong thời gian chạy, bạn có thể định cấu hình các chế độ cài đặt này và một số chế độ cài đặt bổ sung bằng cách cập nhật đối tượng GoogleMap
trong lệnh gọi lại onMapReady
. Các chế độ cài đặt bổ sung được định cấu hình thông qua các phương thức của lớp
GoogleMap
, chẳng hạn như các phương thức định cấu hình lớp lưu lượng truy cập và khoảng đệm bản đồ.
Ví dụ:
Trong mã ví dụ bên dưới và ảnh chụp màn hình ở trên, bản đồ được định cấu hình với các chế độ cài đặt sau.
Các chế độ cài đặt ban đầu được định cấu hình trong tệp bố cục:
- Bật các chế độ điều khiển thu phóng.
- Bật các chế độ điều khiển cử chỉ xoay.
- Đặt độ nghiêng của bản đồ thành 30.
Cài đặt thời gian chạy:
- Đưa camera vào giữa Nhật Bản.
- Bật loại bản đồ kết hợp.
- Bật lớp giao thông.
Cài đặt ban đầu
<?xml version="1.0" encoding="utf-8"?> <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:name="com.google.android.gms.maps.SupportMapFragment" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" map:uiZoomControls="true" map:uiRotateGestures="true" map:cameraTilt="30" />
Cài đặt thời gian chạy
package com.example.mapsetup; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; 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.MarkerOptions; public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } // Update the map configuration at runtime. @Override public void onMapReady(GoogleMap googleMap) { // Set the map coordinates to Kyoto Japan. LatLng kyoto = new LatLng(35.00116, 135.7681); // Set the map type to Hybrid. googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); // Add a marker on the map coordinates. googleMap.addMarker(new MarkerOptions() .position(kyoto) .title("Kyoto")); // Move the camera to the map coordinates and zoom in closer. googleMap.moveCamera(CameraUpdateFactory.newLatLng(kyoto)); googleMap.moveCamera(CameraUpdateFactory.zoomTo(15)); // Display traffic. googleMap.setTrafficEnabled(true); } }
Trước khi bắt đầu
Trước khi bắt đầu, bạn có thể thiết lập một dự án và thêm bản đồ cơ bản thông qua các tuỳ chọn sau:
Tạo ứng dụng bằng mẫu Maps cho Android Studio. Mẫu Maps sẽ tự động định cấu hình dự án của bạn và thêm bản đồ cơ bản. Một mảnh được dùng làm vùng chứa bản đồ và được thêm tĩnh. Để biết thông tin chi tiết, hãy xem phần bắt đầu nhanh.
Định cấu hình dự án cho SDK theo cách thủ công và thêm bản đồ cơ bản. Điều này cho phép bạn sử dụng bất kỳ mẫu Android nào và thêm bản đồ vào ứng dụng hiện có.
Định cấu hình bản đồ sau khi thêm tĩnh
Phần này mô tả cách đặt trạng thái ban đầu của bản đồ nếu bạn đã thêm tĩnh vào tệp bố cục.
SDK bản đồ dành cho Android xác định một tập hợp các thuộc tính XML tuỳ chỉnh cho
SupportMapFragment
hoặc MapView
mà bạn có thể sử dụng để định cấu hình trạng thái ban đầu
của bản đồ ngay từ tệp bố cục. Hiện tại, bạn đã xác định các thuộc tính sau:
mapType
— Loại bản đồ để hiển thị. Các giá trị hợp lệ bao gồm:none
,normal
,hybrid
,satellite
vàterrain
.cameraTargetLat
,cameraTargetLng
,cameraZoom
,cameraBearing
,cameraTilt
– Vị trí ban đầu của máy ảnh. Vui lòng xem hướng dẫn về máy ảnh và chế độ xem để biết thông tin chi tiết.uiZoomControls
,uiCompass
– Chỉ định xem có hiển thị các tùy chọn điều khiển thu phóng và la bàn hay không. Hãy xemUiSettings
để biết chi tiết.uiZoomGestures
,uiScrollGestures
,uiRotateGestures
,uiTiltGestures
— Chỉ định xem bạn đã bật các cử chỉ cụ thể hay chưa. Hãy xemUiSettings
để biết thông tin chi tiết.zOrderOnTop
— Cho biết bề mặt của chế độ xem bản đồ có hiển thị ở phía trên cùng của cửa sổ bản đồ, các nút điều khiển bản đồ và đối tượng nào trong cửa sổ đó hay không. Hãy xem SurfaceView.setZOrderOnTop(boolean) để biết thông tin chi tiết.useViewLifecycle
– Chỉ hợp lệ với đối tượngSupportMapFragment
. Chỉ định vòng đời của bản đồ nên được liên kết với chế độ xem của mảnh hoặc chính mảnh đó. Để biết thông tin chi tiết, hãy xem tại đây.liteMode
–true
để bật chế độ thu gọn; nếu không, hãy bậtfalse
.
Để sử dụng các thuộc tính tuỳ chỉnh này trong tệp bố cục, bạn phải đưa nội dung khai báo vùng chứa tên sau đây vào. Bạn có thể chọn bất kỳ vùng chứa tên nào
không cần phải là map
:
xmlns:map="http://schemas.android.com/apk/res-auto"
Sau đó, bạn có thể thêm các thuộc tính có tiền tố map:
vào tệp bố cục.
Tệp bố cục sau đây định cấu hình một đối tượng SupportMapFragment
có các thuộc tính bản đồ tuỳ chỉnh. Bạn cũng có thể áp dụng các thuộc tính tương tự cho đối tượng MapView
.
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
map:cameraBearing="112.5"
map:cameraTargetLat="-33.796923"
map:cameraTargetLng="150.922433"
map:cameraTilt="30"
map:cameraZoom="13"
map:mapType="normal"
map:uiCompass="false"
map:uiRotateGestures="true"
map:uiScrollGestures="false"
map:uiTiltGestures="true"
map:uiZoomControls="false"
map:uiZoomGestures="true"/>
Định cấu hình bản đồ sau khi thêm động
Phần này mô tả cách đặt trạng thái ban đầu của bản đồ nếu bạn đã thêm động vào ứng dụng.
Nếu tự động thêm SupportMapFragment
hoặc MapView
, bạn có thể
đặt trạng thái ban đầu của bản đồ trong đối tượng GoogleMapOptions
. Các tùy chọn có sẵn là các tùy chọn giống như trong tệp bố cục.
Bạn có thể tạo GoogleMapOptions
như sau:
Java
GoogleMapOptions options = new GoogleMapOptions();
Kotlin
val options = GoogleMapOptions()
Rồi định cấu hình như sau:
Java
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false);
Kotlin
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false)
Để áp dụng các tuỳ chọn này khi bạn đang tạo bản đồ, hãy thực hiện một trong những cách sau:
- Nếu bạn đang sử dụng một
SupportMapFragment
, hãy sử dụng phương thức nhà máy tĩnhSupportMapFragment.newInstance(GoogleMapOptions options)
để tạo mảnh và truyền vào phần cài đặt. - Nếu bạn đang sử dụng
MapView
, hãy sử dụng hàm khởi tạoMapView(Context, GoogleMapOptions)
và truyền vào các tuỳ chọn cài đặt.
Thiết lập lớp lưu lượng truy cập
Bạn có thể hiển thị dữ liệu giao thông trên bản đồ của mình bằng cách bật lớp giao thông. Bạn có thể bật và tắt lớp lưu lượng truy cập bằng cách gọi phương thức setTrafficEnabled()
. Bạn có thể xác định xem lớp lưu lượng truy cập hiện có đang bật hay không bằng cách gọi phương thức isTrafficEnabled()
. Ảnh chụp màn hình sau đây hiển thị một bản đồ có lớp giao thông được bật.
Đặt loại bản đồ
Để đặt loại bản đồ, hãy gọi phương thức setMapType
.
Ví dụ: để hiển thị bản đồ vệ tinh:
Java
// Sets the map type to be "hybrid" map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
Kotlin
// Sets the map type to be "hybrid" map.mapType = GoogleMap.MAP_TYPE_HYBRID
Hình ảnh sau đây so sánh các loại bản đồ pháp tuyến, lai và địa hình thông thường:

Thiết lập toà nhà 3D
Khi xem gần, nhiều thành phố sẽ có các toà nhà 3D hiển thị, như có thể thấy trong hình bên dưới của Vancouver, Canada. Bạn có thể tắt các toà nhà 3D bằng cách gọi GoogleMap.setBuildingsEnabled(false)
.

Thiết lập chế độ cài đặt bản đồ trong nhà
Ở mức thu phóng cao, bản đồ hiển thị sơ đồ tầng cho các không gian trong nhà, chẳng hạn như sân bay, trung tâm mua sắm, cửa hàng bán lẻ lớn và trạm phương tiện công cộng. Các sơ đồ tầng này (được gọi là bản đồ trong nhà) được hiển thị cho các loại bản đồ "bình thường" và "vệ tinh" (GoogleMap.MAP_TYPE_NORMAL
và GoogleMap.MAP_TYPE_SATELLITE
). Các sơ đồ này được tự động bật khi người dùng phóng to và biến mất khi bản đồ được thu nhỏ.
Thông báo về việc ngừng cung cấp: Trong một bản phát hành trong tương lai, bản đồ
trong nhà sẽ chỉ có trên loại bản đồ normal
. Từ
bản phát hành trong tương lai đó, bản đồ trong nhà sẽ không được hỗ trợ trên bản đồ satellite
,
terrain
hoặc hybrid
. Ngay cả khi không hỗ trợ trong nhà, isIndoorEnabled()
vẫn sẽ trả về giá trị đã được đặt qua setIndoorEnabled()
như hiện tại. Theo mặc định, setIndoorEnabled
là true
. Ghi chú phát hành sẽ cho bạn biết thời điểm hỗ trợ trong nhà không hoạt động trên các loại bản đồ đó.

Dưới đây là tóm tắt về chức năng bản đồ trong nhà trong API:
- Bạn có thể tắt bản đồ trong nhà bằng cách gọi
GoogleMap.setIndoorEnabled(false)
. Theo mặc định, bản đồ trong nhà được bật. Bản đồ trong nhà mỗi lần chỉ được hiển thị trên một bản đồ. Theo mặc định, đây là bản đồ đầu tiên được thêm vào ứng dụng của bạn. Để hiển thị các bản đồ trong nhà trên một bản đồ khác, hãy tắt các bản đồ này trên bản đồ đầu tiên, sau đó gọisetIndoorEnabled(true)
trên bản đồ thứ hai. - Để tắt bộ chọn cấp mặc định (bộ chọn tầng), hãy gọi
GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false)
. Để biết thêm thông tin chi tiết, vui lòng xem bài viết Tương tác với bản đồ. OnIndoorStateChangeListener
— xác định trình nghe phát hiện thời điểm một toà nhà được chú ý hoặc một cấp độ được kích hoạt trong một toà nhà. Để biết thêm thông tin chi tiết, vui lòng xem phần Tương tác với bản đồ.getFocusedBuilding
— truy xuất toà nhà đang được lấy tiêu điểm. Sau đó, bạn có thể tìm thấy cấp độ đang hoạt động bằng cách gọiIndoorBuilding.getActiveLevelIndex()
.- Việc tạo kiểu cho bản đồ cơ sở không ảnh hưởng đến bản đồ trong nhà.
Thiết lập khoảng đệm bản đồ
Video này trình bày ví dụ về khoảng đệm bản đồ.
Bản đồ của Google được thiết kế để lấp đầy toàn bộ khu vực do phần tử vùng chứa xác định, thường là MapView
hoặc SupportMapFragment
. Một số khía cạnh của cách bản đồ xuất hiện và hoạt động được xác định theo kích thước của vùng chứa:
- Mục tiêu của máy ảnh sẽ phản ánh tâm của vùng đệm.
- Công cụ điều khiển bản đồ được định vị tương đối với các cạnh của bản đồ.
- Thông tin pháp lý, chẳng hạn như tuyên bố bản quyền hoặc biểu trưng của Google xuất hiện ở cạnh dưới cùng của bản đồ.
Bạn có thể thêm khoảng đệm xung quanh các cạnh của bản đồ bằng cách sử dụng GoogleMap
.Phương thức setPadding()
. Bản đồ sẽ tiếp tục lấp đầy toàn bộ vùng chứa, nhưng vị trí văn bản và bộ điều khiển, cử chỉ bản đồ và chuyển động của máy ảnh sẽ hoạt động như thể nó được đặt trong một không gian nhỏ hơn. Điều này sẽ dẫn đến những thay đổi sau:
- Di chuyển máy ảnh thông qua các lệnh gọi API hoặc thao tác nhấn nút (ví dụ: la bàn, vị trí của tôi, các nút thu phóng) tương ứng với vùng được đệm.
- Phương thức
getCameraPosition
trả về tâm của vùng đệm. - Các phương thức
Projection
vàgetVisibleRegion
trả về vùng đệm. - Các nút điều khiển trên giao diện người dùng được bù trừ từ cạnh của vùng chứa bằng số pixel đã chỉ định.
Khoảng đệm có thể hữu ích khi thiết kế giao diện người dùng trùng lặp với một số phần của bản đồ. Trong hình sau, bản đồ được đệm dọc theo cạnh trên và cạnh phải. Các nút điều khiển bản đồ có thể nhìn thấy và văn bản pháp lý sẽ được hiển thị dọc theo các cạnh của vùng đệm, được hiển thị bằng màu xanh lục, trong khi bản đồ sẽ tiếp tục lấp đầy toàn bộ vùng chứa, được hiển thị bằng màu xanh dương. Trong ví dụ này, bạn có thể di chuyển một trình đơn ở bên phải bản đồ mà không che khuất các thành phần điều khiển của bản đồ.