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 bản đồ 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 ban đầu và thời gian chạy
cài đặt 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 phương thức tĩnh hoặc động. Nếu vùng chứa bản đồ
thêm theo phương thức 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 tệp được thêm theo phương thức động, bạn có thể định cấu hình các chế độ cài đặt ban đầu trong phần
Lệnh gọi lại OnCreate
với GoogleMapOptions
.
Để biết thông tin chi tiết về việc thêm vùng chứa bản đồ, hãy xem phần 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, đặt và nghiêng. 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ư tính năng thu phóng các nút và la bàn.
- Các cử chỉ cần 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 onMapReady
. Các chế độ cài đặt bổ sung này được định cấu hình thông qua các phương thức của
GoogleMap
, chẳng hạn như các lớp đị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ụ dưới đây và ảnh chụp màn hình ở trên, bản đồ là 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 tùy 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 ảnh theo hướng Tokyo Nhật Bản.
- Bật loại bản đồ kết hợp.
- Bật lớp giao thông.
Chế độ 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 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 sử dụng làm vùng chứa bản đồ và được thêm vào theo phương thức tĩnh. Để biết chi tiết, hãy xem bắt đầu nhanh.
Định cấu hình dự án theo cách thủ công cho SDK và thêm bản đồ cơ bản. Thao tác này cho phép bạn sử dụng bất kỳ mẫu Android nào và thêm ánh xạ đến ứng dụng hiện có.
Định cấu hình bản đồ sau khi thêm bản đồ 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 bản đồ đó tĩnh cho tệp bố cục của bạn.
SDK bản đồ dành cho Android xác định một tập hợp thuộc tính XML tùy chỉnh cho một tập hợp
SupportMapFragment
hoặc MapView
mà bạn có thể dùng để định cấu hình giá trị ban đầu
trạng thái của bản đồ ngay trong 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 camera and views để biết thông tin chi tiết.uiZoomControls
,uiCompass
– Chỉ định xem các tuỳ chọn điều khiển thu phóng và la bàn được hiển thị. Hãy xemUiSettings
để biết thông tin chi tiết.uiZoomGestures
,uiScrollGestures
,uiRotateGestures
,uiTiltGestures
— Chỉ định xem có bật các cử chỉ cụ thể hay không. 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ó được hiển thị trên đầu cửa sổ bản đồ, các tuỳ chọn điều khiển bản đồ và bất kỳ đối tượng nào trong cửa sổ. Xem SurfaceView.setZOrderOnTop(boolean) để biết chi tiết.useViewLifecycle
– Chỉ hợp lệ với đối tượngSupportMapFragment
. Chỉ định liệu vòng đời của bản đồ có gắn liền với chế độ xem 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 thì làfalse
.mapColorScheme
– Chỉ định bảng phối màu cho bản đồ thông thường và bản đồ địa hình. Các giá trị bao gồmlight
(mặc định),dark
vàfollow_system
, nghĩa là hãy sử dụng chế độ cài đặt hiện tại của hệ thống dựa trên chế độ cài đặt của thiết bịUI_NIGHT_MODE_MASK
. Để biết thêm thông tin, hãy xem phần Bảng phối màu của bản đồ.
Để sử dụng các thuộc tính tuỳ chỉnh này trong tệp bố cục, tệp phải
hãy bao gồm phần 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 một đối tượng SupportMapFragment
bằng các thành phần tuỳ chỉnh
thuộc tính bản đồ. Bạn có thể áp dụng các thuộc tính tương tự cho đối tượng MapView
như
tốt.
<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:mapColorScheme="dark"
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 thêm trạng thái bản đồ đó cho ứng dụng của bạn một cách linh động.
Nếu đã thêm SupportMapFragment
hoặc MapView
theo phương thức động, thì bạn có thể
đặt trạng thái ban đầu của bản đồ trong đối tượng GoogleMapOptions
. Chiến lược phát hành đĩa đơn
các tuỳ chọn có sẵn chính là 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 đó, hãy định cấu hình thẻ 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 sử dụng
SupportMapFragment
, hãy sử dụngSupportMapFragment.newInstance(GoogleMapOptions options)
phương thức nhà máy tĩnh để tạo mảnh và chuyển vào cài đặt của bạn. - Nếu bạn đang sử dụng
MapView
, hãy sử dụng Hàm khởi tạoMapView(Context, GoogleMapOptions)
và chuyển vào phần cài đặt.
Bản địa hoá bản đồ của bạn
Khi bạn thêm MapView
hoặc SupportMapFragment
vào ứng dụng, các phần tử văn bản
trên bản đồ được hiển thị bằng ngôn ngữ thích hợp dựa trên thiết bị của người dùng
cài đặt và vị trí. Bạn có thể hạn chế ngôn ngữ mà ứng dụng sử dụng ở
là tập hợp con của tất cả ngôn ngữ được hỗ trợ, bằng cách thêm một mục resConfigs
vào Gradle
. Điều này hữu ích để loại bỏ các ngôn ngữ không được sử dụng đồng thời giảm
kích thước nhị phân của ứng dụng. Ví dụ:
defaultConfig {
resConfigs "en", "fr", "es", "zh", "de", "ja", "ru", "ko", "pt", "in"
}
Đọc thêm về cách bản địa hoá ứng dụng Android 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
setTrafficEnabled()
và bạn có thể xác định liệu lớp lưu lượng truy cập hiện có đang bật hay không bằng cách
đang gọi
isTrafficEnabled()
. Ảnh chụp màn hình sau đây hiển thị 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:
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:
![So sánh ba loại bản đồ. So sánh MapType](https://developers.google.cn/static/maps/documentation/android-sdk/images/map_types.png?authuser=0000&hl=vi)
Thiết lập toà nhà 3D
Nhiều thành phố, khi được xem cận cảnh, sẽ có các toà nhà 3D nhìn thấy được, như là có thể xem được
trong ảnh dưới đây về Vancouver, Canada. Bạn có thể tắt toà nhà 3d bằng cách
đang gọi
GoogleMap.setBuildingsEnabled(false)
.
![Bản đồ của Vancouver, Canada](https://developers.google.cn/static/maps/documentation/android-sdk/images/vancouver.png?authuser=0000&hl=vi)
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
không gian trong nhà như sân bay, trung tâm mua sắm, cửa hàng bán lẻ lớn và phương tiện công cộng
các trạm sạc. Các sơ đồ tầng này, được gọi là bản đồ trong nhà, được hiển thị theo giá trị 'bình thường'
và "Vệ tinh" loại bản đồ (GoogleMap.MAP_TYPE_NORMAL
và
GoogleMap.MAP_TYPE_SATELLITE
). Chúng được tự động bật khi người dùng
phóng to và chúng mờ dần khi bản đồ được 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 đồ 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 satellite
,
Bản đồ terrain
hoặc hybrid
. Ngay cả khi không ở trong nhà
được hỗ trợ, isIndoorEnabled()
sẽ tiếp tục trả về giá trị
đã được thiết lập qua setIndoorEnabled()
như hiện tại. Theo
mặc định, setIndoorEnabled
là true
. Chiến lược phát hành đĩa đơn
ghi chú phát hành sẽ cho phép
bạn sẽ biết khi nào tính năng hỗ trợ trong nhà ngừng hoạt động trên các loại bản đồ đó.
![Ví dụ về bản đồ trong nhà. Ví dụ về bản đồ trong nhà](https://developers.google.cn/static/maps/documentation/android-sdk/images/indoor.png?authuser=0000&hl=vi)
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)
. Bản đồ trong nhà được bật theo mặc định. Bản đồ trong nhà được hiển thị trên một bản đồ tại một lúc. Theo mặc định, đây là bản đồ đầu tiên được thêm vào ứng dụng của bạn. Người nhận hiển thị bản đồ trong nhà trên một bản đồ khác, tắt chúng trên bản đồ đầu tiên, sau đó gọisetIndoorEnabled(true)
trên bản đồ thứ hai. - Để tắt công cụ chọn mức mặc định (bộ chọn tầng), hãy gọi
GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false)
. Để biết thêm thông tin, hãy xem bài viết Tương tác với bản đồ. OnIndoorStateChangeListener
— xác định trình nghe phát hiện khi một toà nhà xuất hiện trong tiêu điểm hoặc một tầng được kích hoạt trong một toà nhà. Để biết thông tin chi tiết, hãy xem bài viết Tương tác với Bản đồ.getFocusedBuilding
– truy xuất toà nhà trong tập trung. Sau đó, bạn có thể tìm cấp độ hoạt động bằng cách gọiIndoorBuilding.getActiveLevelIndex()
.- 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 minh hoạ một ví dụ về khoảng đệm bản đồ.
Bản đồ Google được thiết kế để lấp đầy toàn bộ khu vực được vùng chứa của nó xác định
thường là MapView
hoặc SupportMapFragment
. Một số khía cạnh về 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 của nó:
- Mục tiêu của máy ảnh sẽ phản ánh chính giữa của vùng đệ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ố về bản quyền hoặc biểu trưng của Google sẽ xuất hiện dọc theo cạnh dưới 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ăn bản và thành phần điều khiển định vị, bản đồ
cử chỉ và chuyển động của camera sẽ hoạt động như thể chúng được đặt trong
không gian nhỏ hơn. Điều này dẫn đến những thay đổi sau:
- Di chuyển của 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í, nút thu phóng) là tương đối so với vùng đệm.
- Phương thức
getCameraPosition
trả về tâm của vù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ừ từ cạnh của vùng chứa bởi giá trị số lượng pixel.
Khoảng đệm có thể hữu ích khi thiết kế giao diện người dùng chồng chéo lên một phần của bản đồ. Trong hình sau, bản đồ được đệm dọc theo phần đầu và cạnh phải. Các nút điều khiển bản đồ hiển thị và văn bản pháp lý sẽ được hiển thị dọc theo 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ể thực hiện một phía bên phải của bản đồ mà không che khuất các nút điều khiển trên bản đồ.
Bảng phối màu bản đồ
Đối với bản đồ loại thường và địa hình, bạn có thể đặt bảng phối màu bản đồ một cách linh động sang tối, sáng hoặc sử dụng chế độ cài đặt hệ thống hiện tại. Ví dụ: bạn có thể làm tối hoặc làm sáng bảng phối màu bản đồ dựa trên thời gian trong ngày hoặc sử dụng thiết bị ở trong nhà hoặc ngoài trời.
Theo mặc định, bản đồ sử dụng chế độ sáng. Giá trị cài đặt hệ thống hiện tại là
trên chế độ cài đặt thiết bị cho UI_NIGHT_MODE_MASK
.
Kotlin
mapFragment = SupportMapFragment.newInstance(GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2))
Java
mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2));
Bạn có thể bật/tắt bảng phối màu bằng cách sử dụng
GoogleMap.setMapColorScheme()
phương pháp để đặt kiểu hiện tại thành chế độ tối, chế độ sáng hoặc tuân theo hệ thống
phần cài đặt.
Kotlin
googleMap.setMapColorScheme(MapColorScheme.DARK) googleMap.setMapColorScheme(MapColorScheme.LIGHT) googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM)
Java
googleMap.setMapColorScheme(MapColorScheme.DARK); googleMap.setMapColorScheme(MapColorScheme.LIGHT); googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM);