سبک نقشه پایه جدید به زودی به پلتفرم نقشه های گوگل می آید. این بهروزرسانی برای استایل نقشه شامل یک پالت رنگی پیشفرض جدید، پینهای مدرن شده و بهبودهایی در تجربهها و قابلیت استفاده از نقشه است. همه سبکهای نقشه بهطور خودکار در مارس 2025 بهروزرسانی میشوند. برای اطلاعات بیشتر در مورد در دسترس بودن و نحوه انتخاب زودتر، به سبک نقشه جدید برای پلتفرم Google Maps مراجعه کنید.
این آموزش به شما نشان می دهد که چگونه یک نقشه با استایل سفارشی به برنامه اندروید خود اضافه کنید. این آموزش از حالت شب به عنوان نمونه ای از یک ظاهر طراحی سفارشی استفاده می کند.
با گزینههای سبک میتوانید نمایش سبکهای استاندارد نقشه Google را سفارشی کنید، نمایش بصری ویژگیهایی مانند جادهها، پارکها، مشاغل و سایر نقاط مورد علاقه را تغییر دهید. این بدان معنی است که می توانید بر اجزای خاصی از نقشه تأکید کنید یا نقشه را مکمل سبک برنامه خود کنید.
یک ظاهر طراحی شده فقط در نوع نقشه normal کار می کند. یک ظاهر طراحی روی نقشه های داخلی تأثیر نمی گذارد.
کلید API خود را در مقدار ویژگی GOOGLE_MAPS_API_KEY قرار دهید. وقتی برنامه خود را میسازید، Gradle کلید API را در مانیفست اندروید برنامه کپی میکند.
GOOGLE_MAPS_API_KEY=PASTE-YOUR-API-KEY-HERE
اپلیکیشن خود را بسازید و اجرا کنید
یک دستگاه اندرویدی را به رایانه خود وصل کنید. دستورالعمل ها را دنبال کنید تا گزینه های توسعه دهنده را در دستگاه Android خود فعال کنید و سیستم خود را برای شناسایی دستگاه پیکربندی کنید. (از طرف دیگر، میتوانید از مدیر دستگاه مجازی Android (AVD) برای پیکربندی یک دستگاه مجازی استفاده کنید. هنگام انتخاب یک شبیهساز، مطمئن شوید که تصویری را انتخاب کردهاید که شامل APIهای Google باشد. برای جزئیات بیشتر، راهنمای شروع کار را ببینید.)
در اندروید استودیو، روی گزینه منوی Run (یا نماد دکمه پخش) کلیک کنید. همانطور که از شما خواسته شده یک دستگاه را انتخاب کنید.
اندروید استودیو از Gradle برای ساخت برنامه فراخوانی می کند و سپس برنامه را روی دستگاه یا شبیه ساز اجرا می کند. شما باید نقشه ای را با حالت تاریک (حالت شب) مشابه تصویر این صفحه ببینید.
عیب یابی:
اگر نقشهای را نمیبینید، همانطور که در بالا توضیح داده شد، بررسی کنید که یک کلید API دریافت کردهاید و آن را به برنامه اضافه کردهاید. ورود به سیستم مانیتور اندروید استودیو اندروید را برای پیام های خطا در مورد کلید API بررسی کنید.
این بخش از آموزش مهم ترین بخش های برنامه StyledMap را توضیح می دهد تا به شما در درک نحوه ساخت یک برنامه مشابه کمک کند.
یک منبع حاوی یک شی به سبک JSON اضافه کنید
منبعی را به پروژه توسعه خود اضافه کنید که حاوی اعلان های سبک شما در قالب JSON باشد. همانطور که در مثال های زیر نشان داده شده است، می توانید از یک منبع خام یا یک رشته استفاده کنید.
منبع خام
یک منبع خام را در /res/raw/style_json.json تعریف کنید که حاوی اعلان سبک JSON برای استایلسازی در حالت شب است:
یک منبع رشته را در /res/values/style_strings.xml تعریف کنید که حاوی اعلان سبک JSON برای استایلسازی در حالت شب است. این آموزش از نام رشته style_json استفاده می کند. در این فایل برای فرار از علامت نقل قول باید از بک اسلش استفاده کنید:
نمونه کد زیر فرض می کند که پروژه شما حاوی یک منبع خام به نام 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)));
}
}
طرح ( activity_maps_raw.xml ) به این صورت است:
نمایش/پنهان کردن فایل طرح بندی
<!--
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.
-->
<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:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.styledmap.MapsActivityRaw"
map:cameraZoom="10" />
منبع رشته
نمونه کد زیر فرض می کند که پروژه شما حاوی یک منبع رشته ای به نام 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)));
}
}
نقشه های سبک از دو مفهوم برای اعمال رنگ ها و سایر تغییرات سبک در نقشه استفاده می کنند:
انتخابگرها اجزای جغرافیایی را مشخص میکنند که میتوانید روی نقشه استایل دهید. اینها شامل جاده ها، پارک ها، منابع آبی و موارد دیگر و همچنین برچسب های آنها می شود. انتخابگرها شامل ویژگیها و عناصر هستند که به عنوان ویژگیهای featureType و elementType مشخص میشوند.
استایلرها ویژگیهای رنگ و دید هستند که میتوانید روی عناصر نقشه اعمال کنید. آنها رنگ نمایش داده شده را از طریق ترکیبی از مقادیر رنگ، رنگ و روشنایی/گاما تعریف می کنند.
برای توضیحات مفصل گزینه های سبک JSON به مرجع سبک مراجعه کنید.
از Maps Platform Styling Wizard به عنوان یک راه سریع برای تولید یک شی استایل JSON استفاده کنید. Maps SDK برای Android از اعلانهای سبک مشابه با Maps JavaScript API پشتیبانی میکند.
این آموزش به شما نشان می دهد که چگونه یک نقشه با استایل سفارشی به برنامه اندروید خود اضافه کنید. این آموزش از حالت شب به عنوان نمونه ای از یک ظاهر طراحی سفارشی استفاده می کند.
با گزینههای سبک میتوانید نمایش سبکهای استاندارد نقشه Google را سفارشی کنید، نمایش بصری ویژگیهایی مانند جادهها، پارکها، مشاغل و سایر نقاط مورد علاقه را تغییر دهید. این بدان معنی است که می توانید بر اجزای خاصی از نقشه تأکید کنید یا نقشه را مکمل سبک برنامه خود کنید.
یک ظاهر طراحی شده فقط در نوع نقشه normal کار می کند. یک ظاهر طراحی روی نقشه های داخلی تأثیر نمی گذارد.
کلید API خود را در مقدار ویژگی GOOGLE_MAPS_API_KEY قرار دهید. وقتی برنامه خود را میسازید، Gradle کلید API را در مانیفست اندروید برنامه کپی میکند.
GOOGLE_MAPS_API_KEY=PASTE-YOUR-API-KEY-HERE
اپلیکیشن خود را بسازید و اجرا کنید
یک دستگاه اندرویدی را به رایانه خود وصل کنید. دستورالعمل ها را دنبال کنید تا گزینه های توسعه دهنده را در دستگاه Android خود فعال کنید و سیستم خود را برای شناسایی دستگاه پیکربندی کنید. (از طرف دیگر، میتوانید از مدیر دستگاه مجازی Android (AVD) برای پیکربندی یک دستگاه مجازی استفاده کنید. هنگام انتخاب یک شبیهساز، مطمئن شوید که تصویری را انتخاب کردهاید که شامل APIهای Google باشد. برای جزئیات بیشتر، راهنمای شروع کار را ببینید.)
در اندروید استودیو، روی گزینه منوی Run (یا نماد دکمه پخش) کلیک کنید. همانطور که از شما خواسته شده یک دستگاه را انتخاب کنید.
اندروید استودیو از Gradle برای ساخت برنامه فراخوانی می کند و سپس برنامه را روی دستگاه یا شبیه ساز اجرا می کند. شما باید نقشه ای را با حالت تاریک (حالت شب) مشابه تصویر این صفحه ببینید.
عیب یابی:
اگر نقشهای را نمیبینید، همانطور که در بالا توضیح داده شد، بررسی کنید که یک کلید API دریافت کردهاید و آن را به برنامه اضافه کردهاید. ورود به سیستم مانیتور اندروید استودیو اندروید را برای پیام های خطا در مورد کلید API بررسی کنید.
این بخش از آموزش مهم ترین بخش های برنامه StyledMap را توضیح می دهد تا به شما در درک نحوه ساخت یک برنامه مشابه کمک کند.
یک منبع حاوی یک شی به سبک JSON اضافه کنید
منبعی را به پروژه توسعه خود اضافه کنید که حاوی اعلان های سبک شما در قالب JSON باشد. همانطور که در مثال های زیر نشان داده شده است، می توانید از یک منبع خام یا یک رشته استفاده کنید.
منبع خام
یک منبع خام را در /res/raw/style_json.json تعریف کنید که حاوی اعلان سبک JSON برای استایلسازی در حالت شب است:
یک منبع رشته را در /res/values/style_strings.xml تعریف کنید که حاوی اعلان سبک JSON برای استایلسازی در حالت شب است. این آموزش از نام رشته style_json استفاده می کند. در این فایل برای فرار از علامت نقل قول باید از بک اسلش استفاده کنید:
نمونه کد زیر فرض می کند که پروژه شما حاوی یک منبع خام به نام 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)));
}
}
طرح ( activity_maps_raw.xml ) به این صورت است:
نمایش/پنهان کردن فایل طرح بندی
<!--
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.
-->
<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:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.styledmap.MapsActivityRaw"
map:cameraZoom="10" />
منبع رشته
نمونه کد زیر فرض می کند که پروژه شما حاوی یک منبع رشته ای به نام 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)));
}
}
نقشه های سبک از دو مفهوم برای اعمال رنگ ها و سایر تغییرات سبک در نقشه استفاده می کنند:
انتخابگرها اجزای جغرافیایی را مشخص میکنند که میتوانید روی نقشه استایل دهید. اینها شامل جاده ها، پارک ها، منابع آبی و موارد دیگر و همچنین برچسب های آنها می شود. انتخابگرها شامل ویژگیها و عناصر هستند که به عنوان ویژگیهای featureType و elementType مشخص میشوند.
استایلرها ویژگیهای رنگ و دید هستند که میتوانید روی عناصر نقشه اعمال کنید. آنها رنگ نمایش داده شده را از طریق ترکیبی از مقادیر رنگ، رنگ و روشنایی/گاما تعریف می کنند.
برای توضیحات مفصل گزینه های سبک JSON به مرجع سبک مراجعه کنید.
از Maps Platform Styling Wizard به عنوان یک راه سریع برای تولید یک شی استایل JSON استفاده کنید. Maps SDK برای Android از اعلانهای سبک مشابه با Maps JavaScript API پشتیبانی میکند.
این آموزش به شما نشان می دهد که چگونه یک نقشه با استایل سفارشی به برنامه اندروید خود اضافه کنید. این آموزش از حالت شب به عنوان نمونه ای از یک ظاهر طراحی سفارشی استفاده می کند.
با گزینههای سبک میتوانید نمایش سبکهای استاندارد نقشه Google را سفارشی کنید، نمایش بصری ویژگیهایی مانند جادهها، پارکها، مشاغل و سایر نقاط مورد علاقه را تغییر دهید. این بدان معنی است که می توانید بر اجزای خاصی از نقشه تأکید کنید یا نقشه را مکمل سبک برنامه خود کنید.
یک ظاهر طراحی شده فقط در نوع نقشه normal کار می کند. یک ظاهر طراحی روی نقشه های داخلی تأثیر نمی گذارد.
کلید API خود را در مقدار ویژگی GOOGLE_MAPS_API_KEY قرار دهید. وقتی برنامه خود را میسازید، Gradle کلید API را در مانیفست اندروید برنامه کپی میکند.
GOOGLE_MAPS_API_KEY=PASTE-YOUR-API-KEY-HERE
اپلیکیشن خود را بسازید و اجرا کنید
یک دستگاه اندرویدی را به رایانه خود وصل کنید. دستورالعمل ها را دنبال کنید تا گزینه های توسعه دهنده را در دستگاه Android خود فعال کنید و سیستم خود را برای شناسایی دستگاه پیکربندی کنید. (از طرف دیگر، میتوانید از مدیر دستگاه مجازی Android (AVD) برای پیکربندی یک دستگاه مجازی استفاده کنید. هنگام انتخاب یک شبیهساز، مطمئن شوید که تصویری را انتخاب کردهاید که شامل APIهای Google باشد. برای جزئیات بیشتر، راهنمای شروع کار را ببینید.)
در اندروید استودیو، روی گزینه منوی Run (یا نماد دکمه پخش) کلیک کنید. همانطور که از شما خواسته شده یک دستگاه را انتخاب کنید.
اندروید استودیو از Gradle برای ساخت برنامه فراخوانی می کند و سپس برنامه را روی دستگاه یا شبیه ساز اجرا می کند. شما باید نقشه ای را با حالت تاریک (حالت شب) مشابه تصویر این صفحه ببینید.
عیب یابی:
اگر نقشهای را نمیبینید، همانطور که در بالا توضیح داده شد، بررسی کنید که یک کلید API دریافت کردهاید و آن را به برنامه اضافه کردهاید. ورود به سیستم مانیتور اندروید استودیو اندروید را برای پیام های خطا در مورد کلید API بررسی کنید.
این بخش از آموزش مهم ترین بخش های برنامه StyledMap را توضیح می دهد تا به شما در درک نحوه ساخت یک برنامه مشابه کمک کند.
یک منبع حاوی یک شی به سبک JSON اضافه کنید
منبعی را به پروژه توسعه خود اضافه کنید که حاوی اعلان های سبک شما در قالب JSON باشد. همانطور که در مثال های زیر نشان داده شده است، می توانید از یک منبع خام یا یک رشته استفاده کنید.
منبع خام
یک منبع خام را در /res/raw/style_json.json تعریف کنید که حاوی اعلان سبک JSON برای استایلسازی در حالت شب است:
یک منبع رشته را در /res/values/style_strings.xml تعریف کنید که حاوی اعلان سبک JSON برای استایلسازی در حالت شب است. این آموزش از نام رشته style_json استفاده می کند. در این فایل برای فرار از علامت نقل قول باید از بک اسلش استفاده کنید:
نمونه کد زیر فرض می کند که پروژه شما حاوی یک منبع خام به نام 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)));
}
}
طرح ( activity_maps_raw.xml ) به این صورت است:
نمایش/پنهان کردن فایل طرح بندی
<!--
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.
-->
<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:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.styledmap.MapsActivityRaw"
map:cameraZoom="10" />
منبع رشته
نمونه کد زیر فرض می کند که پروژه شما حاوی یک منبع رشته ای به نام 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)));
}
}
نقشه های سبک از دو مفهوم برای اعمال رنگ ها و سایر تغییرات سبک در نقشه استفاده می کنند:
انتخابگرها اجزای جغرافیایی را مشخص میکنند که میتوانید روی نقشه استایل دهید. اینها شامل جاده ها، پارک ها، منابع آبی و موارد دیگر و همچنین برچسب های آنها می شود. انتخابگرها شامل ویژگیها و عناصر هستند که به عنوان ویژگیهای featureType و elementType مشخص میشوند.
استایلرها ویژگیهای رنگ و دید هستند که میتوانید روی عناصر نقشه اعمال کنید. آنها رنگ نمایش داده شده را از طریق ترکیبی از مقادیر رنگ، رنگ و روشنایی/گاما تعریف می کنند.
برای توضیحات مفصل گزینه های سبک JSON به مرجع سبک مراجعه کنید.
از Maps Platform Styling Wizard به عنوان یک راه سریع برای تولید یک شی استایل JSON استفاده کنید. Maps SDK برای Android از اعلانهای سبک مشابه با Maps JavaScript API پشتیبانی میکند.
این آموزش به شما نشان می دهد که چگونه یک نقشه با استایل سفارشی به برنامه اندروید خود اضافه کنید. این آموزش از حالت شب به عنوان نمونه ای از یک ظاهر طراحی سفارشی استفاده می کند.
با گزینههای سبک میتوانید نمایش سبکهای استاندارد نقشه Google را سفارشی کنید، نمایش بصری ویژگیهایی مانند جادهها، پارکها، مشاغل و سایر نقاط مورد علاقه را تغییر دهید. این بدان معنی است که می توانید بر اجزای خاصی از نقشه تأکید کنید یا نقشه را مکمل سبک برنامه خود کنید.
یک ظاهر طراحی شده فقط در نوع نقشه normal کار می کند. یک ظاهر طراحی روی نقشه های داخلی تأثیر نمی گذارد.
کلید API خود را در مقدار ویژگی GOOGLE_MAPS_API_KEY قرار دهید. وقتی برنامه خود را میسازید، Gradle کلید API را در مانیفست اندروید برنامه کپی میکند.
GOOGLE_MAPS_API_KEY=PASTE-YOUR-API-KEY-HERE
اپلیکیشن خود را بسازید و اجرا کنید
یک دستگاه اندرویدی را به رایانه خود وصل کنید. دستورالعمل ها را دنبال کنید تا گزینه های توسعه دهنده را در دستگاه Android خود فعال کنید و سیستم خود را برای شناسایی دستگاه پیکربندی کنید. (از طرف دیگر، میتوانید از مدیر دستگاه مجازی Android (AVD) برای پیکربندی یک دستگاه مجازی استفاده کنید. هنگام انتخاب یک شبیهساز، مطمئن شوید که تصویری را انتخاب کردهاید که شامل APIهای Google باشد. برای جزئیات بیشتر، راهنمای شروع کار را ببینید.)
در اندروید استودیو، روی گزینه منوی Run (یا نماد دکمه پخش) کلیک کنید. همانطور که از شما خواسته شده یک دستگاه را انتخاب کنید.
اندروید استودیو از Gradle برای ساخت برنامه فراخوانی می کند و سپس برنامه را روی دستگاه یا شبیه ساز اجرا می کند. شما باید نقشه ای را با حالت تاریک (حالت شب) مشابه تصویر این صفحه ببینید.
عیب یابی:
اگر نقشهای را نمیبینید، همانطور که در بالا توضیح داده شد، بررسی کنید که یک کلید API دریافت کردهاید و آن را به برنامه اضافه کردهاید. ورود به سیستم مانیتور اندروید استودیو اندروید را برای پیام های خطا در مورد کلید API بررسی کنید.
این بخش از آموزش مهم ترین بخش های برنامه StyledMap را توضیح می دهد تا به شما در درک نحوه ساخت یک برنامه مشابه کمک کند.
یک منبع حاوی یک شی به سبک JSON اضافه کنید
منبعی را به پروژه توسعه خود اضافه کنید که حاوی اعلان های سبک شما در قالب JSON باشد. همانطور که در مثال های زیر نشان داده شده است، می توانید از یک منبع خام یا یک رشته استفاده کنید.
منبع خام
یک منبع خام را در /res/raw/style_json.json تعریف کنید که حاوی اعلان سبک JSON برای استایلسازی در حالت شب است:
یک منبع رشته را در /res/values/style_strings.xml تعریف کنید که حاوی اعلان سبک JSON برای استایلسازی در حالت شب است. این آموزش از نام رشته style_json استفاده می کند. در این فایل برای فرار از علامت نقل قول باید از بک اسلش استفاده کنید:
نمونه کد زیر فرض می کند که پروژه شما حاوی یک منبع خام به نام 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)));
}
}
طرح ( activity_maps_raw.xml ) به این صورت است:
نمایش/پنهان کردن فایل طرح بندی
<!--
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.
-->
<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:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.styledmap.MapsActivityRaw"
map:cameraZoom="10" />
منبع رشته
نمونه کد زیر فرض می کند که پروژه شما حاوی یک منبع رشته ای به نام 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)));
}
}
نقشه های سبک از دو مفهوم برای اعمال رنگ ها و سایر تغییرات سبک در نقشه استفاده می کنند:
انتخابگرها اجزای جغرافیایی را مشخص میکنند که میتوانید روی نقشه استایل دهید. اینها شامل جاده ها، پارک ها، منابع آبی و موارد دیگر و همچنین برچسب های آنها می شود. انتخابگرها شامل ویژگیها و عناصر هستند که به عنوان ویژگیهای featureType و elementType مشخص میشوند.
استایلرها ویژگیهای رنگ و دید هستند که میتوانید روی عناصر نقشه اعمال کنید. آنها رنگ نمایش داده شده را از طریق ترکیبی از مقادیر رنگ، رنگ و روشنایی/گاما تعریف می کنند.
برای توضیحات مفصل گزینه های سبک JSON به مرجع سبک مراجعه کنید.
از Maps Platform Styling Wizard به عنوان یک راه سریع برای تولید یک شی استایل JSON استفاده کنید. Maps SDK برای Android از اعلانهای سبک مشابه با Maps JavaScript API پشتیبانی میکند.