این آموزش به شما نشان می دهد که چگونه یک نقشه با استایل سفارشی به برنامه اندروید خود اضافه کنید. این آموزش از حالت شب به عنوان نمونه ای از یک ظاهر طراحی سفارشی استفاده می کند.
با گزینههای سبک میتوانید نمایش سبکهای استاندارد نقشه Google را سفارشی کنید، نمایش بصری ویژگیهایی مانند جادهها، پارکها، مشاغل و سایر نقاط مورد علاقه را تغییر دهید. این بدان معنی است که می توانید بر اجزای خاصی از نقشه تأکید کنید یا نقشه را مکمل سبک برنامه خود کنید.
یک ظاهر طراحی شده فقط در نوع نقشه normal
کار می کند. یک ظاهر طراحی روی نقشه های داخلی تأثیر نمی گذارد.
کد را دریافت کنید
مخزن Google Maps Android API v2 Samples را کلون کنید یا از GitHub دانلود کنید .
پروژه توسعه خود را تنظیم کنید
برای ایجاد پروژه آموزشی در اندروید استودیو مراحل زیر را دنبال کنید.
- اندروید استودیو را دانلود و نصب کنید .
- بسته خدمات Google Play را به Android Studio اضافه کنید .
- اگر وقتی شروع به خواندن این آموزش کردید ، مخزن Google Maps Android API v2 Samples را شبیه سازی یا دانلود کنید .
وارد کردن پروژه آموزشی:
- در Android Studio، File > New > Import Project را انتخاب کنید.
- پس از دانلود به مکانی که مخزن Google Maps Android API v2 Samples را ذخیره کرده اید، بروید.
- پروژه StyledMap را در این مکان پیدا کنید:
PATH-TO-SAVED-REPO/android-samples/tutorials/StyledMap
- دایرکتوری پروژه را انتخاب کنید، سپس روی OK کلیک کنید. Android Studio اکنون پروژه شما را با استفاده از ابزار ساخت Gradle می سازد.
یک کلید API دریافت کنید و API های لازم را فعال کنید
برای تکمیل این آموزش، به یک کلید Google API نیاز دارید که مجاز به استفاده از Maps SDK برای Android باشد.
برای دریافت کلید و فعال کردن API روی دکمه زیر کلیک کنید.
برای جزئیات بیشتر، راهنمای دریافت کلید API را ببینید.
کلید API را به برنامه خود اضافه کنید
- فایل
gradle.properties
پروژه خود را ویرایش کنید. کلید 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
استفاده می کند. در این فایل برای فرار از علامت نقل قول باید از بک اسلش استفاده کنید:
یک شی به سبک JSON را به نقشه خود ارسال کنید
برای استایل دادن به نقشه خود، با ارسال یک شی MapStyleOptions
که حاوی اعلان های سبک شما در قالب JSON است، با GoogleMap.setMapStyle()
تماس بگیرید.
منبع خام
نمونه کد زیر فرض می کند که پروژه شما حاوی یک منبع خام به نام 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
) به این صورت است:
منبع رشته
نمونه کد زیر فرض می کند که پروژه شما حاوی یک منبع رشته ای به نام 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))); } }
طرح ( activity_maps_string.xml
) به این صورت است:
اطلاعات بیشتر در مورد اعلان های سبک JSON
نقشه های سبک از دو مفهوم برای اعمال رنگ ها و سایر تغییرات سبک در نقشه استفاده می کنند:
- انتخابگرها اجزای جغرافیایی را مشخص میکنند که میتوانید روی نقشه استایل دهید. اینها شامل جاده ها، پارک ها، منابع آبی و موارد دیگر و همچنین برچسب های آنها می شود. انتخابگرها شامل ویژگیها و عناصر هستند که به عنوان ویژگیهای
featureType
وelementType
مشخص میشوند. - استایلرها ویژگیهای رنگ و دید هستند که میتوانید روی عناصر نقشه اعمال کنید. آنها رنگ نمایش داده شده را از طریق ترکیبی از مقادیر رنگ، رنگ و روشنایی/گاما تعریف می کنند.
برای توضیحات مفصل گزینه های سبک JSON به مرجع سبک مراجعه کنید.