يوضح هذا الموضوع كيفية إضافة خريطة أساسية إلى تطبيق Android بعد تهيئة المشروع لاستخدام خرائط Google SDK لنظام التشغيل Android. بعد إضافة الخريطة، يمكنك تغيير نوع الخريطة والميزات.
نظرة عامة
توفر حزمة SDK للخرائط لنظام التشغيل Android عدة صفوف يمكن لتطبيقك استخدامها لإدارة دورة حياة الخريطة ووظائفها وبياناتها. تدعم الفئات تفاعلات المستخدم استنادًا إلى نموذج واجهة مستخدم Android، مثل تعيين الحالة الأولية للخريطة، والرد على إدخال الإيماءة من المستخدم في وقت التشغيل.
الواجهة والفئات الأساسية للتعامل مع الخرائط:
GoogleMap
— نقطة الدخول لإدارة ميزات الخريطة والبيانات الأساسية. لا يمكن لتطبيقك الوصول إلى الكائنGoogleMap
إلا بعد استرداده من الكائنSupportMapFragment
أوMapView
.SupportMapFragment
— جزء لإدارة دورة حياة كائنGoogleMap
.OnMapReadyCallback
— واجهة استدعاء للتعامل مع الأحداث وتفاعل المستخدم للعنصرGoogleMap
.
ينفذ الكائن GoogleMap
تلقائيًا هذه العمليات:
- جارٍ الاتصال بخدمة خرائط Google.
- جارٍ تنزيل مربعات الخرائط.
- يتم عرض المربعات على شاشة الجهاز.
- عرض عناصر تحكم متنوعة مثل العرض الشامل والتكبير/التصغير.
- الاستجابة لإيماءات العرض الشامل والتكبير/التصغير من خلال تحريك الخريطة وتكبيرها أو تصغيرها.
لاستخدام كائن GoogleMap
في تطبيقك، يجب استخدام إما كائن
SupportMapFragment
أو MapView
ككائن حاوية للخريطة،
وبعد ذلك يمكنك استرداد كائن GoogleMap
من الحاوية. ونظرًا لأن فئات الحاوية تكون مشتقة من جزء من Android أو من طريقة عرض، فإنها تمد الخريطة بالإدارة وبإمكانيات واجهة المستخدم للصفوف الأساسية في Android.
إنّ فئة SupportMapFragment
هي الحاوية الأكثر شيوعًا وحداثة في عنصر GoogleMap
.
عرض الشفرة
تأتي الشفرة التالية من نشاط جافا الكامل المستخدم في هذا الموضوع عند إضافة جزء بشكل ثابت. تم إنشاء مشروع 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 في Github.
الخطوات الأساسية:
للحصول على حزمة 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
، ثم تتم إضافة علامة إلى الخريطة:
لغة 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") ) }
عند إنشاء وتشغيل التطبيق بنجاح، سيعرض خريطة مع علامة على جزيرة نول (خط العرض صفر الصفر وخط الطول صفر درجات).
عرض شفرة النشاط الكامل:
الخطوات التالية
بعد استكمال هذه الخطوات، يمكنك تهيئة إعدادات الخريطة.