يوضّح هذا الموضوع كيفية ضبط خريطة تمت إضافتها إلى تطبيق Android باستخدام حزمة تطوير البرامج (SDK) لتطبيق "خرائط Google" لنظام التشغيل Android.
نظرة عامة
بعد إضافة خريطة إلى تطبيقك، يمكنك ضبط الإعدادات الأولية وإعدادات وقت التشغيل
للخريطة. يجب تهيئة الإعدادات الأولية استنادًا إلى ما إذا كان
أضفت حاوية الخريطة (SupportMapFragment
أو
MapView
) بشكل ثابت أو ديناميكي إذا كانت حاوية الخريطة
بشكل ثابت، يمكنك تهيئة إعدادات الخريطة الأولية في ملف التخطيط.
إذا تمت إضافته ديناميكيًا، يمكنك ضبط الإعدادات الأولية في
معاودة الاتصال على OnCreate
مع GoogleMapOptions
الخاص بك.
للحصول على تفاصيل حول إضافة حاوية خريطة، راجع إضافة خريطة.
تشمل الإعدادات الأولية للخريطة ما يلي:
- موضع الكاميرا، بما في ذلك الموقع الجغرافي والتكبير/التصغير والاتجاه والإمالة راجِع الكاميرا والعرض للحصول على تفاصيل عن مكان الكاميرا.
- نوع الخريطة
- مكونات واجهة المستخدم المطلوب عرضها، مثل أزرار التكبير/التصغير والبوصلة
- الإيماءات المطلوب تفعيلها.
- ما إذا كان الوضع البسيط مفعَّلاً.
في وقت التشغيل، يمكنك ضبط هذه الإعدادات وبعض إعدادات الإضافة من خلال
جارٍ تعديل الكائن GoogleMap
في onMapReady
معاودة الاتصال. يتم ضبط الإعدادات الإضافية من خلال طُرق فئة
GoogleMap
، مثل تلك التي تضبط
طبقة حركة المرور وملء الخريطة.
مثال
في مثال الرمز البرمجي أدناه ولقطة الشاشة أعلاه، تم ضبط الخريطة باستخدام الإعدادات التالية.
يتم ضبط الإعدادات الأولية في ملف التنسيق:
- تفعيل عناصر التحكم في التكبير أو التصغير.
- يمكنك تفعيل عناصر التحكّم في الإيماءات.
- اضبط إمالة الخريطة على 30.
إعدادات بيئة التشغيل:
- يجب توجيه الكاميرا نحو كيوتو في اليابان.
- تتيح هذه السياسة تفعيل نوع الخريطة المختلطة.
- شغّل طبقة حركة المرور.
الإعدادات الأولية
<?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" />
إعدادات وقت التشغيل
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); } }
قبل البدء
قبل البدء، يمكنك إعداد مشروع وإضافة خريطة أساسية من خلال الخيارات التالية:
يمكنك إنشاء تطبيق باستخدام نموذج "خرائط Google" في "استوديو Android". يضبط نموذج "الخرائط" مشروعك تلقائيًا ويضيف خريطة أساسية. يتم استخدام مقتطف كحاوية للخريطة ويتم إضافته بشكل ثابت. لمعرفة التفاصيل، يُرجى الاطّلاع على الدليل السريع.
يمكنك ضبط مشروعك يدويًا لحزمة SDK إضافة خريطة أساسية. يتيح لك ذلك استخدام أي نموذج Android وإضافة ملف رسمي إلى تطبيق حالي.
ضبط خريطة بعد إضافتها بشكل ثابت
يصف هذا القسم كيفية تعيين الحالة الأولية للخريطة في حالة إضافتها بشكل ثابت إلى ملف التخطيط.
تحدِّد حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لنظام التشغيل Android مجموعة من سمات XML المخصّصة لملف SupportMapFragment
أو MapView
يمكنك استخدامها لضبط الحالة
المبدئية للخريطة مباشرةً من ملف التنسيق. تم تحديد السمات التالية
في الوقت الحالي:
mapType
— نوع الخريطة التي سيتم عرضها تشمل القيم الصالحة ما يلي:none
، "normal
" و"hybrid
" و"satellite
" و"terrain
""
cameraTargetLat
" و"cameraTargetLng
" و"cameraZoom
" و"cameraBearing
"cameraTilt
— الموضع الأولي للكاميرا. يمكنك الاطّلاع على الكاميرا وطرق العرض للحصول على التفاصيل.
uiZoomControls
وuiCompass
: لتحديد ما إذا كان سيتم عرض عناصر التحكّم في التكبير/التصغير وال Kompass يُرجى الاطّلاع علىUiSettings
لمعرفة التفاصيل.
uiZoomGestures
وuiScrollGestures
وuiRotateGestures
وuiTiltGestures
: تحدد ما إذا كانت إيماءات معيّنة مفعّلة. يُرجى الاطّلاع علىUiSettings
لمعرفة التفاصيل.
zOrderOnTop
: يشير إلى ما إذا كان سطح عرض الخريطة معروضًا أعلى نافذة الخريطة وعناصر التحكّم في الخريطة وأي عنصر في النافذة. عرض SurfaceView.setZOrderOnTop(boolean) لمعرفة التفاصيل.
useViewLifecycle
: صالح فقط مع عنصرSupportMapFragment
. تُحدِّد ما إذا كان يجب ربط دورة حياة الخريطة بعرض المقتطف أو المقتطف نفسه. يمكنك الاطّلاع هنا على التفاصيل.liteMode
-true
لتفعيل الوضع البسيط، وfalse
في حال عدم تفعيلهmapColorScheme
: تحدّد هذه السياسة نظام الألوان للخريطة العادية والتضاريس. تشمل القيمlight
(التلقائية) وdark
وfollow_system
، ما يعني استخدام إعدادات النظام الحالية استنادًا إلى إعدادات الجهاز لUI_NIGHT_MODE_MASK
. لمزيد من المعلومات، يُرجى الاطّلاع على مخطط ألوان الخريطة.
لاستخدام هذه السمات المخصصة ضمن ملف التنسيق، يجب
تضمين تعريف مساحة الاسم التالي. يمكنك اختيار أي مساحة اسم،
لا يلزم أن يكون map
:
xmlns:map="http://schemas.android.com/apk/res-auto"
يمكنك بعد ذلك إضافة السمات باستخدام بادئة map:
إلى ملف التنسيق.
يضبط ملف التنسيق التالي عنصر SupportMapFragment
باستخدام سمات
خريطة مخصّصة. ويمكن تطبيق السمات نفسها على عنصر 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:mapColorScheme="dark"
map:uiCompass="false"
map:uiRotateGestures="true"
map:uiScrollGestures="false"
map:uiTiltGestures="true"
map:uiZoomControls="false"
map:uiZoomGestures="true"/>
إعداد الخريطة بعد إضافتها بشكل ديناميكي
يوضّح هذا القسم كيفية ضبط الحالة الأولية للخريطة إذا أضفتها إلى تطبيقك ديناميكيًا.
إذا أضفت SupportMapFragment
أو MapView
بشكل ديناميكي، يمكنك
ضبط الحالة الأولية للخريطة في عنصر GoogleMapOptions
. الخيارات المتاحة هي الخيارات نفسها المتوفّرة في ملف التنسيق.
يمكنك إنشاء GoogleMapOptions
على النحو التالي:
Kotlin
val options = GoogleMapOptions()
Java
GoogleMapOptions options = new GoogleMapOptions();
بعد ذلك، اضبطها على النحو التالي:
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);
لتطبيق هذه الخيارات عند إنشاء خريطة، يمكنك تنفيذ أحد الإجراءات التالية:
- إذا كنت تستخدم
SupportMapFragment
، استخدِمSupportMapFragment.newInstance(GoogleMapOptions options)
طريقة المصنع الثابتة لإنشاء المقتطف وإدخال إعداداتك. - في حال استخدام
MapView
، عليك استخدام طريقة إنشاءMapView(Context, GoogleMapOptions)
ومرره في الإعدادات الخاصة بك.
أقلمة خريطتك
عند إضافة MapView
أو SupportMapFragment
إلى تطبيقك، تظهر العناصر النصية
يتم عرضها على الخريطة باللغة المناسبة حسب جهاز المستخدم
الإعدادات والموقع الجغرافي. يمكنك حصر اللغات التي يستخدمها تطبيقك على
مجموعة فرعية من كل اللغات المتاحة، من خلال إضافة عنصر resConfigs
إلى Gradle
الملف. ويُعدّ ذلك مفيدًا لإزالة اللغات غير المستخدَمة، كما يساعد في تقليل حجم ملف ثنائي
تطبيقك. على سبيل المثال:
defaultConfig {
resConfigs "en", "fr", "es", "zh", "de", "ja", "ru", "ko", "pt", "in"
}
اطّلِع على مزيد من المعلومات عن أقلمة تطبيق Android.
إعداد طبقة حركة المرور
يمكنك عرض بيانات حركة المرور على خريطتك من خلال تفعيل طبقة حركة المرور. يمكنك
تفعيل طبقة الزيارات وإيقافها من خلال استدعاء الأسلوب
setTrafficEnabled()
، ويمكنك تحديد ما إذا كانت طبقة الزيارات مفعّلة حاليًا من خلال
استدعاء الأسلوب
isTrafficEnabled()
. تعرض لقطة الشاشة التالية خريطة تم تفعيل طبقة الزيارات فيها.
ضبط نوع الخريطة
لضبط نوع الخريطة، استخدِم طريقة setMapType
.
على سبيل المثال، لعرض خريطة القمر الصناعي:
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);
تقارن الصورة التالية بين أنواع الخرائط العادية والمختلطة وخرائط التضاريس:
إعداد المباني الثلاثية الأبعاد
العديد من المدن، عندما يتم عرضها عن قرب، تظهر مبانٍ ثلاثية الأبعاد تكون قابلة للعرض.
في الصورة أدناه لمدينة فانكوفر، كندا. يمكنك إيقاف المباني الثلاثية الأبعاد من خلال
يتصل
GoogleMap.setBuildingsEnabled(false)
ضبط إعدادات الخرائط الداخلية
عند مستويات التكبير العالية، تعرض الخريطة مخططات الطوابق للفضاءات الداخلية، مثل المطارات والمراكز التجارية ومتاجر البيع بالتجزئة الكبيرة ومحطات النقل العام. يتم عرض هذه المخططات الأرضية، التي تُعرف باسم الخرائط الداخلية، في أنواع الخرائط "العادية"
و"بالأقمار الصناعية" (GoogleMap.MAP_TYPE_NORMAL
و
GoogleMap.MAP_TYPE_SATELLITE
). ويتم تفعيلها تلقائيًا عندما يزداد حجم الخريطة، وتتلاشى عندما يتم تصغيرها.
إشعار بإيقاف الميزة نهائيًا: في إصدار مستقبلي، لن تتوفّر خرائط
الأماكن الداخلية إلا في نوع الخريطة normal
. من ذلك
الإصدار المستقبلي، لن تتوافق الخرائط الداخلية على satellite
،
خريطة terrain
أو hybrid
حتى الأماكن الداخلية ليست
متاح، سيستمر isIndoorEnabled()
في عرض القيمة
التي تم ضبطها عبر setIndoorEnabled()
، كما هي الحال الآن. من
الافتراضي، setIndoorEnabled
هو true
. تشير رسالة الأشكال البيانية
ملاحظات الإصدار
عندما يصبح الدعم الداخلي غير
متوفر على أنواع الخرائط هذه.
في ما يلي ملخّص عن وظائف الخرائط الداخلية في واجهة برمجة التطبيقات:
- يمكنك تعطيل الخرائط الداخلية من خلال الاتصال
GoogleMap.setIndoorEnabled(false)
يتم تفعيل الخرائط الداخلية افتراضيًا. يتم عرض الخرائط الداخلية على خريطة واحدة في في وقت معين. تكون هذه الخريطة تلقائيًا هي الخريطة الأولى التي تمت إضافتها إلى تطبيقك. ل عرض الخرائط الداخلية على خريطة مختلفة، أوقِف عرضها على الخريطة الأولى، ثم اطلبsetIndoorEnabled(true)
على الخريطة الثانية. - لإيقاف أداة اختيار المستوى التلقائية (أداة اختيار الأرضية)، اتصل بالرقم
GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false)
. لمزيد من التفاصيل، يُرجى الاطّلاع على التفاعل مع الخريطة. -
OnIndoorStateChangeListener
: لتحديد المستمعين الذين يرصدون عندما يصبح مبنى في المقدّمة أو يتم تفعيل مستوى في مبنى لمعرفة التفاصيل، يُرجى الاطّلاع على التفاعل مع الخريطة. getFocusedBuilding
- لاسترداد المبنى الذي هو في التركيز يمكنك بعد ذلك العثور على مستوى النشاط من خلال الاتصالIndoorBuilding.getActiveLevelIndex()
- لا يؤثّر تصميم الخريطة الأساسية في الخرائط الداخلية.
إعداد المساحة المتروكة للخريطة
يعرض هذا الفيديو مثالاً على المساحة المتروكة في الخريطة.
تم تصميم خريطة Google لملء المنطقة المحددة بواسطة حاويتها بالكامل
وهو عادةً MapView
أو SupportMapFragment
. يجب أن تتضمن الجوانب العديدة لكيفية
تظهر الخريطة وتتصرف من خلال أبعاد حاويتها:
- سيعكس هدف الكاميرا منتصف المنطقة المبطّنة.
- يتم وضع عناصر التحكّم في الخريطة بالنسبة إلى حواف الخريطة.
- تظهر المعلومات القانونية، مثل بيانات حقوق الطبع والنشر أو شعار Google، على جانب الخريطة السفلي.
يمكنك إضافة مساحة متروكة حول حواف الخريطة باستخدام
GoogleMap
setPadding()
. ستضم الخريطة
الاستمرار في ملء الحاوية بالكامل، لكن النص والتحكم في تحديد الموضع،
والإيماءات وحركات الكاميرا كما لو تم وضعها في
مساحة أصغر. يؤدّي ذلك إلى التغييرات التالية:
- حركات الكاميرا عبر طلبات بيانات من واجهة برمجة التطبيقات أو الضغطات على الأزرار (على سبيل المثال، البوصلة، "الموقع الجغرافي" وأزرار التكبير/التصغير) نسبية إلى المنطقة ذات المساحة المتروكة.
- تعرض الطريقة
getCameraPosition
مركز المنطقة المبطّنة. - تُرجع الطريقتان
Projection
وgetVisibleRegion
المنطقة المُضاف إليها مساحة. - يتمّ إزاحة عناصر التحكّم في واجهة المستخدم عن حافة الحاوية بعدد محدد من البكسلات.
يمكن أن يكون المُربّع المسافة مفيدة عند تصميم واجهات مستخدم تتداخل مع جزء من الخريطة. في الصورة التالية، أصبحت الخريطة محشوة بالأعلى الحواف اليمنى. سيتم عرض عناصر التحكّم في الخريطة والنص القانوني المرئيَين على طول حواف المنطقة المخصّصة للإعلانات، والتي تظهر باللون الأخضر، بينما ستستمر الخريطة في ملء الحاوية بأكملها، والتي تظهر باللون الأزرق. في هذا المثال، يمكنك عائمة القائمة على الجانب الأيمن من الخريطة بدون حجب عناصر التحكم في الخريطة.
نظام ألوان الخريطة
بالنسبة إلى الخرائط من النوع العادي والتضاريس، يمكنك ضبط مخطط ألوان الخريطة ديناميكيًا على مظهر داكن أو فاتح أو استخدام إعدادات النظام الحالية. على سبيل المثال، يمكنك تخفيف أو تكثيف نظام ألوان الخريطة استنادًا إلى الوقت من اليوم أو استخدام الجهاز في الداخل أو الخارج.
تستخدم الخريطة تلقائيًا الوضع الفاتح. تستند قيمة إعداد النظام الحالي إلى
على إعدادات الجهاز في "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));
يمكنك تبديل نظام الألوان باستخدام
GoogleMap.setMapColorScheme()
لضبط النمط الحالي على الوضع الداكن أو الوضع الفاتح أو اتّباع النظام
الإعدادات.
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);
ضبط لون الخلفية
عند العمل في الوضع الداكن أو التبديل بين طرق عرض الخريطة، قد يكون من المفيد
ضبط لون خلفية الخريطة التلقائي. ويمكن تحقيق ذلك من خلال تعيين
سمة خيارات الخريطة backgroundColor
.
Kotlin
private val googleMapOptions: GoogleMapOptions = GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));
Java
private GoogleMapOptions options = new GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));
يمكنك أيضًا استخدام تصميم الخرائط المستند إلى السحابة الإلكترونية لضبط لون الخلفية. يكون لون الخلفية الذي تم ضبطه في تنسيق الخرائط ذا أولوية أعلى من لون الخلفية المحلي. لمزيد من المعلومات، يمكنك الاطّلاع على تغيير خلفية التطبيق. اللون في تصميم الخرائط باستخدام السحابة الإلكترونية.