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 của mình, bạn có thể định cấu hình chế độ cài đặt ban đầu và chế độ cài đặt thời gian chạy của bản đồ. Các chế độ cài đặt ban đầu cần được định cấu hình dựa trên việc bạn thêm vùng chứa bản đồ (SupportMapFragment
hoặc MapView
) theo cách tĩnh hay động. Nếu vùng chứa bản đồ được thêm theo cách 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 lệnh này được thêm một cách linh động, thì bạn có thể định cấu hình 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 vùng chứa bản đồ, hãy xem bài viết Thêm bản đồ.
Chế độ cài đặt ban đầu của bản đồ bao gồm:
- Vị trí của máy ảnh, bao gồm: vị trí, thu phóng, góc phương tiện và độ nghiêng. Xem phần Máy ảnh và Chế độ xem để biết thông tin chi tiết về vị trí 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ư các nút thu phóng và la bàn.
- Các cử chỉ để bật.
- Liệu chế độ thu gọn 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 chế độ cài đặt đị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 bằng 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 tuỳ chọn điều khiển cử chỉ xoay.
- Đặt độ nghiêng bản đồ thành 30.
Chế độ cài đặt thời gian chạy:
- Căn giữa máy quay về phía Tokyo 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" />
Chế độ 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 một ứng dụng bằng mẫu Maps dành cho Android Studio. Mẫu Maps sẽ tự động định cấu hình dự án của bạn và thêm một bản đồ cơ bản. Mảnh được dùng làm vùng chứa bản đồ và được thêm vào theo cách tĩnh. Để biết thông tin chi tiết, vui lòng xem phần quickstart.
Định cấu hình dự án theo cách thủ công cho SDK và thêm bản đồ cơ bản. Điều này cho phép bạn 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 bản đồ theo cách 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 trạng thái 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. Các thuộc tính sau đây hiện được xác định:
mapType
— Loại bản đồ cầ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í máy ảnh ban đầu. 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ác nút điều khiển thu phóng và la bàn có hiển thị hay không. XemUiSettings
để biết chi tiết.uiZoomGestures
,uiScrollGestures
,uiRotateGestures
,uiTiltGestures
— Chỉ định xem có bật các cử chỉ cụ thể hay không. Hãy xemUiSettings
để biết thông tin chi tiết.zOrderOnTop
– Cho biết liệu bề mặt của chế độ xem bản đồ có hiển thị ở đầu cửa sổ bản đồ, các nút điều khiển bản đồ hay bất kỳ đố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 xem vòng đời của bản đồ phải được liên kết với khung hiển thị của mảnh hay chính mảnh đó. Xem tại đây để biết chi tiết.liteMode
–true
để bật chế độ thu gọn; nếu không, hãy dùngfalse
.
Để sử dụng các thuộc tính tuỳ chỉnh này trong tệp bố cục, bạn phải khai báo không gian tên sau đây. Bạn có thể chọn bất kỳ không gian tên nào, không nhất thiết 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 đối tượng SupportMapFragment
với 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 bản đồ một cách linh động
Phần này mô tả cách đặt trạng thái ban đầu của bản đồ nếu bạn tự động thêm trạng thái đó vào ứng dụng.
Nếu đã thêm SupportMapFragment
hoặc MapView
một cách linh động, thì bạn có thể đặt trạng thái ban đầu của bản đồ trong đối tượng GoogleMapOptions
. Các tuỳ chọn có sẵn cũng giống như các tuỳ chọn có trong tệp bố cục.
Bạn có thể tạo GoogleMapOptions
như sau:
Kotlin
val options = GoogleMapOptions()
Java
GoogleMapOptions options = new GoogleMapOptions();
Sau đó, định cấu hình như sau:
Kotlin
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false)
Java
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false);
Để áp dụng các tùy chọn này khi bạn tạo bản đồ, hãy làm theo một trong những cách sau:
- Nếu bạn đang dùng
SupportMapFragment
, hãy dùng phương thức nhà máy tĩnhSupportMapFragment.newInstance(GoogleMapOptions options)
để tạo mảnh và truyền vào chế độ cài đặt của bạn. - Nếu bạn đang dùng
MapView
, hãy dùng hàm khởi tạoMapView(Context, GoogleMapOptions)
rồi truyền vào các chế độ cài đặt của bạn.
Thiết lập lớp giao thông
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()
, đồng thời 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ị bản đồ với 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:
Kotlin
// Sets the map type to be "hybrid" map.mapType = GoogleMap.MAP_TYPE_HYBRID
Java
// Sets the map type to be "hybrid" map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
Hình ảnh sau đây so sánh các loại bản đồ thông thường, kết hợp và địa hình:
Thiết lập toà nhà 3D
Khi xem cận cảnh nhiều thành phố, bạn sẽ thấy các toà nhà 3D như trong hình ảnh Vancouver, Canada dưới đây. Bạn có thể tắt 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 đồ sẽ hiển thị sơ đồ tầng của 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à sơ đồ trong nhà 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ơ đồ tầng này tự động bật khi người dùng phóng to và mờ dần khi bản đồ thu nhỏ.
Thông báo về việc ngừng sử dụng: Trong bản phát hành sau này, bản đồ trong nhà sẽ chỉ có trên loại bản đồ normal
. Kể từ bản phát hành đó trong tương lai, sơ đồ trong nhà sẽ không được hỗ trợ trên bản đồ satellite
, terrain
hoặc hybrid
. Ngay cả khi chế độ trong nhà không được hỗ trợ, isIndoorEnabled()
vẫn sẽ tiếp tục trả về giá trị đã được đặt thông 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 khi nào tính năng hỗ trợ trong nhà không còn hoạt động trên các loại bản đồ đó.
Dưới đây là tóm tắt về chức năng của 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)
. Sơ đồ trong nhà được bật theo mặc định. Bản đồ trong nhà hiện trên một bản đồ tại một thời điểm. 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ị bản đồ trong nhà trên một bản đồ khác, hãy tắt bản đồ đó 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 sàn), hãy gọi
GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false)
. Để biết thêm chi tiết, hãy xem bài viết Tương tác với bản đồ. OnIndoorStateChangeListener
– xác định những trình nghe giúp phát hiện thời điểm một toà nhà xuất hiện tiêu điểm hoặc một cấp độ được kích hoạt trong một toà nhà. Để biết chi tiết, hãy 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 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 một 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 được xác định bởi phần tử vùng chứa của nó, thường là MapView
hoặc SupportMapFragment
. Một số khía cạnh về cách bản đồ xuất hiện và hành vi đượ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 có đệm.
- Điều khiển bản đồ được đặt tương ứng 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 Google sẽ xuất hiện dọc theo mép 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
.setPadding()
. Bản đồ sẽ tiếp tục lấp đầy toàn bộ vùng chứa, nhưng việc định vị văn bản và điều khiển, các cử chỉ trên bản đồ và di chuyển của máy ảnh sẽ hoạt động như thể được đặt trong một không gian nhỏ hơn. Điều này dẫn đến những thay đổi sau:
- Di chuyển của camera thông qua 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 đệm.
- Phương thức
getCameraPosition
trả về tâm của vùng có khoảng đệm. - Phương thức
Projection
vàgetVisibleRegion
trả về vùng đệm. - Các thành phần điều khiển trên giao diện người dùng được bù trừ so với cạnh của vùng chứa theo số pixel được chỉ định.
Khoảng đệm có thể hữu ích khi thiết kế các giao diện người dùng chồng lên một số phần của bản đồ. Trong hình ảnh sau, bản đồ được thêm vào khoảng đệm dọc theo các cạnh trên cùng và bên phải. Các thành phần điều khiển bản đồ và văn bản pháp lý hữu hình sẽ hiển thị dọc theo các cạnh của khu vực được đệm, 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 với màu xanh dương. Trong ví dụ này, bạn có thể làm nổi một trình đơn ở phía bên phải của bản đồ mà không che khuất các tuỳ chọn điều khiển bản đồ.