يصف هذا الموضوع كيفية إضافة خريطة أساسية إلى تطبيق Android بعد الانتهاء من ضبط المشروع لاستخدام حزمة تطوير البرامج (SDK) لخرائط Google لنظام التشغيل Android. بعد إضافة خريطة، يمكنك تغيير نوع الخريطة وميزاتها.
نظرة عامة
توفر حزمة SDK للخرائط لنظام Android عدة فئات يمكن لتطبيقك استخدامها لإدارة دورة حياة الخريطة ووظائفها وبياناتها. تدعم الفئات تفاعلات المستخدم بناءً على نموذج واجهة المستخدم في Android، مثل تحديد الحالة الأولية للخريطة، والاستجابة لإدخالات الإيماءات من المستخدم في وقت التشغيل.
الواجهة الرئيسية وفئات معالجة الخرائط:
GoogleMap
— نقطة الدخول لإدارة ميزات الخريطة الأساسية وبياناتها. لا يمكن لتطبيقك الوصول إلى عنصرGoogleMap
إلا بعد استرداده من عنصرSupportMapFragment
أوMapView
.SupportMapFragment
: جزء لإدارة دورة حياة عنصرGoogleMap
.OnMapReadyCallback
- واجهة استدعاء تعالج الأحداث وتفاعل المستخدم لكائنGoogleMap
.
ينفِّذ كائن GoogleMap
هذه العمليات تلقائيًا:
- جارٍ الاتصال بخدمة "خرائط Google".
- جارٍ تنزيل مربّعات الخريطة.
- يتم الآن عرض المربّعات على شاشة الجهاز.
- عرض عناصر تحكم متنوعة مثل العرض الشامل والتكبير/التصغير.
- الاستجابة لإيماءات التحريك والتكبير/التصغير عن طريق تحريك الخريطة وتكبيرها أو تصغيرها.
لاستخدام كائن GoogleMap
في تطبيقك، عليك استخدام إما كائن SupportMapFragment
أو MapView
ككائن حاوية للخريطة ثم استرداد الكائن GoogleMap
من الحاوية. إنّ فئات الحاويات مشتقة من جزء من Android أو طريقة عرض، لذا فهي تزوّد الخريطة بإدارة مراحل النشاط وإمكانيات واجهة المستخدم ضمن فئات Android الأساسية.
الفئة SupportMapFragment
هي الحاوية الأكثر حداثة وشمولية لكائن GoogleMap
.
عرض الرمز
التعليمة البرمجية التالية مأخوذة من نشاط Java الكامل المستخدم في هذا الموضوع عند إضافة جزء بشكل ثابت. تم إنشاء مشروع Android من "نموذج المشروع الفارغ"، ثم تم تعديله بناءً على دليل ضبط المشروع. بعد تنفيذ الخطوات في هذا الموضوع، قد تختلف التعليمة البرمجية بناءً على قالب المشروع.
package com.example.mapsetup; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; 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; // Implement OnMapReadyCallback. public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the layout file as the content view. setContentView(R.layout.activity_main); // Get a handle to the fragment and register the callback. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } // Get a handle to the GoogleMap object and display marker. @Override public void onMapReady(GoogleMap googleMap) { googleMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Marker")); } }
إضافة خريطة
يصف هذا القسم كيفية إضافة خريطة أساسية باستخدام جزء باعتباره حاوية خريطة، ومع ذلك، يمكنك استخدام طريقة عرض بدلاً من ذلك. على سبيل المثال، راجع RawMapViewDemoActivity على جيت هب.
الخطوات الأساسية:
للحصول على حزمة SDK، والحصول على مفتاح واجهة برمجة التطبيقات، وإضافة أُطر العمل المطلوبة، اتّبِع الخطوات الواردة في:
إضافة كائن
SupportMapFragment
إلى النشاط الذي سيتعامل مع الخريطة. يمكنك إضافة الجزء بشكل ثابت أو ديناميكي.تنفيذ واجهة
OnMapReadyCallback
.يمكنك ضبط ملف التنسيق على أنّه طريقة عرض المحتوى.
إذا أضفت الجزء بشكل ثابت، يمكنك مقبض للجزء.
سجِّل معاودة الاتصال.
احصل على اسم معرِّف للعنصر
GoogleMap
.
إضافة كائن SupportMapFragment
يمكنك إضافة عنصر SupportMapFragment
إلى تطبيقك بشكل ثابت أو ديناميكي.
وأبسط طريقة هي إضافته بشكل ثابت. في حال إضافة الجزء ديناميكيًا،
يمكنك تنفيذ إجراءات إضافية على الجزء، مثل إزالته
واستبداله في وقت التشغيل.
إضافة جزء بشكل ثابت
في ملف التنسيق للنشاط الذي سيتعامل مع الخريطة:
- إضافة عنصر
fragment
- إضافة تعريف الاسم
xmlns:map="http://schemas.android.com/apk/res-auto"
. يؤدّي ذلك إلى تفعيل استخدام سمات XML المخصّصةmaps
. - في العنصر
fragment
، اضبط السمةandroid:name
علىcom.google.android.gms.maps.SupportMapFragment
. - في العنصر
fragment
، أضِف السمةandroid:id
واضبطها على رقم تعريف المورد (@+id/map
).
على سبيل المثال، إليك ملف تنسيق كامل يتضمّن عنصر fragment
:
<?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"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
إضافة جزء ديناميكيًا
في النشاط:
- إنشاء مثيل
SupportMapFragment
. - تنفيذ معاملة تضيف الجزء إلى النشاط. لمزيد من المعلومات، راجع معاملات التجزئة.
مثلاً:
لغة Java
SupportMapFragment mapFragment = SupportMapFragment.newInstance(); getSupportFragmentManager() .beginTransaction() .add(R.id.my_container, mapFragment) .commit();
Kotlin
val mapFragment = SupportMapFragment.newInstance() supportFragmentManager .beginTransaction() .add(R.id.my_container, mapFragment) .commit()
تنفيذ واجهة OnMapReadyCallback
يمكنك تعديل بيان النشاط على النحو التالي:
لغة Java
class MainActivity extends AppCompatActivity implements OnMapReadyCallback { // ... }
Kotlin
class MainActivity : AppCompatActivity(), OnMapReadyCallback { // ... }
ضبط طريقة عرض المحتوى
في طريقة onCreate
لنشاطك، يمكنك استدعاء طريقة setContentView
وضبط ملف التنسيق كطريقة عرض المحتوى.
على سبيل المثال، إذا كان ملف التنسيق يُسمى main.xml
:
لغة Java
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) }
يمكنك التعرّف على كيفية التعامل مع الجزء وتسجيل ردّ الاتصال.
للحصول على معرّف للجزء، يمكنك استدعاء طريقة
FragmentManager.findFragmentById
وإدخال رقم تعريف المورد للجزء في ملف التنسيق. إذا أضفت الجزء ديناميكيًا، يمكنك تخطّي هذه الخطوة لأنّك سبق أن استردّت الاسم المعرِّف.يجب استدعاء الإجراء
getMapAsync
لضبط معاودة الاتصال على الجزء.
على سبيل المثال، إذا أضفت الجزء بشكل ثابت:
لغة Java
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this);
Kotlin
val mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment mapFragment.getMapAsync(this)
الحصول على اسم معرِّف للعنصر GoogleMap
يمكنك استخدام طريقة معاودة الاتصال في onMapReady
للحصول على معالجة بشأن
كائن GoogleMap
. يتم تشغيل معاودة الاتصال عندما تكون الخريطة جاهزة لتلقي إدخالات المستخدم. توفّر هذه السمة مثيلاً غير خالٍ من الفئة GoogleMap
التي يمكنك استخدامها لتعديل الخريطة.
في هذا المثال، يسترد استدعاء onMapReady
مؤشرًا إلى كائن GoogleMap
ثم تتم إضافة marker إلى الخريطة:
لغة Java
@Override public void onMapReady(GoogleMap googleMap) { googleMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Marker")); }
Kotlin
override fun onMapReady(googleMap: GoogleMap) { googleMap.addMarker( MarkerOptions() .position(LatLng(0.0, 0.0)) .title("Marker") ) }
عندما تنجح في إنشاء وتشغيل التطبيق، فإنه سيعرض خريطة مع علامة على جزيرة Null (خطوط الطول والعرض صفر ودرجات صفر).
اعرض رمز النشاط الكامل:
الخطوات التالية
بعد إكمال هذه الخطوات، يمكنك ضبط إعدادات الخريطة.