تعرض نافذة المعلومات نصًا أو صورًا في نافذة منبثقة فوق الخريطة. وتكون نافذة المعلومات دائمًا مثبّتة بعلامة. ويتم عرضها تلقائيًا عند النقر على العلامة.
عيّنات تعليمات برمجية
يتضمّن مستودع ApiDemos على GitHub نموذجًا يوضّح جميع ميزات نافذة المعلومات:
- MarkerDemoActivity - Java: تخصيص نوافذ المعلومات واستخدام أدوات الاستماع إلى أحداثها
- MarkerDemoActivity - Kotlin: تخصيص نوافذ المعلومات و استخدام أدوات الاستماع إلى أحداثها
مقدمة
تتيح لك نافذة المعلومات عرض معلومات للمستخدم عند النقر على علامة. ويتم عرض نافذة معلومات واحدة فقط في كل مرة. إذا نقر مستخدم على علامة، سيتم إغلاق نافذة المعلومات الحالية وعرض نافذة المعلومات الجديدة. يُرجى العِلم أنّه إذا نقر المستخدم على علامة تعرض حاليًا نافذة معلومات، سيتم إغلاق نافذة المعلومات هذه وإعادة فتحها.
يتم رسم نافذة المعلومات موجّهةً نحو شاشة الجهاز، وتكون متوسّطة فوق العلامة المرتبطة بها. تحتوي نافذة المعلومات التلقائية على العنوان بخط عريض، مع نص المقتطف (اختياري) أسفل العنوان.
إضافة نافذة معلومات
أسهل طريقة لإضافة نافذة معلومات هي ضبط الطريقتَين title() وsnippet() للعلامة المقابلة. سيؤدي ضبط هاتَين السمتَين إلى ظهور نافذة معلومات عند النقر على هذه العلامة.
Kotlin
val melbourneLatLng = LatLng(-37.81319, 144.96298) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLatLng) .title("Melbourne") .snippet("Population: 4,137,400") )
جافا
final LatLng melbourneLatLng = new LatLng(-37.81319, 144.96298); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLatLng) .title("Melbourne") .snippet("Population: 4,137,400"));
إظهار نافذة معلومات أو إخفاؤها
تم تصميم نوافذ المعلومات للاستجابة لأحداث لمس المستخدم. إذا كنت تفضّل ذلك، يمكنك عرض نافذة معلومات آليًا من خلال استدعاء
showInfoWindow()
على العلامة المستهدَفة. ويمكن إخفاء نافذة المعلومات من خلال استدعاء
hideInfoWindow().
Kotlin
val melbourneLatLng = LatLng(-37.81319, 144.96298) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLatLng) .title("Melbourne") ) melbourne?.showInfoWindow() if (melbourne?.isInfoWindowShown == true) { melbourne.hideInfoWindow() }
جافا
final LatLng melbourneLatLng = new LatLng(-37.81319, 144.96298); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLatLng) .title("Melbourne")); melbourne.showInfoWindow(); if (melbourne.isInfoWindowShown()) { melbourne.hideInfoWindow(); }
يمكنك أيضًا إنشاء نوافذ معلومات للعلامات الفردية المجمّعة. يُرجى قراءة دليل إضافة نافذة معلومات للعلامات الفردية المجمّعة.
نوافذ المعلومات المخصّصة
يمكنك أيضًا تخصيص محتوى نوافذ المعلومات وتصميمها. لإجراء
ذلك، عليك إنشاء تنفيذ ملموس لواجهة
InfoWindowAdapter، ثم استدعاء
GoogleMap.setInfoWindowAdapter() باستخدام هذا
التنفيذ. تحتوي الواجهة على طريقتَين يمكنك تنفيذهما:
getInfoWindow(Marker) وgetInfoContents(Marker). ستستدعي
واجهة برمجة التطبيقات أولاً getInfoWindow(Marker)، وإذا تم عرض null، ستستدعي بعد ذلك getInfoContents(Marker). إذا عرضت هذه الطريقة أيضًا null، سيتم استخدام نافذة المعلومات التلقائية.
تتيح لك الطريقة الأولى (getInfoWindow()) توفير طريقة عرض سيتم استخدامها لنافذة المعلومات بأكملها. تتيح لك الطريقة الثانية
(getInfoContents()) تخصيص محتوى النافذة فقط
مع الاحتفاظ بإطار نافذة المعلومات التلقائي وخلفيتها.
تعرض الصور أدناه نافذة معلومات تلقائية ونافذة معلومات بمحتوى مخصّص ونافذة معلومات بإطار وخلفية مخصّصَين.
أحداث نافذة المعلومات
يتضمّن نموذج MarkerDemoActivity تعليمات برمجية مثالاً لـ تسجيل أحداث نافذة المعلومات والتعامل معها.
يمكنك استخدام OnInfoWindowClickListener لتتبّع حدث ناتج عن النقر على نافذة معلومات. لضبط أداة الاستماع هذه على الخريطة،
استدعِ GoogleMap.setOnInfoWindowClickListener(OnInfoWindowClickListener). عندما
ينقر المستخدم على نافذة معلومات، يتم استدعاء onInfoWindowClick(Marker)
ويتم تمييز نافذة المعلومات بلون التمييز التلقائي (الرمادي).
Kotlin
map.setOnInfoWindowClickListener { marker -> Toast.makeText( context, "Info window clicked", Toast.LENGTH_SHORT ).show() }
جافا
map.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { @Override public void onInfoWindowClick(Marker marker) { Toast.makeText(context, "Info window clicked", Toast.LENGTH_SHORT).show(); } });
وبالمثل، يمكنك الاستماع إلى أحداث النقر مع الاستمرار باستخدام الـ
OnInfoWindowLongClickListener، والتي يمكنك ضبطها من خلال استدعاء الـ
GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener).
تتصرّف أداة الاستماع هذه بشكل مشابه لأداة الاستماع إلى أحداث النقر، وسيتم إشعارها بأحداث النقر مع الاستمرار باستخدام معاودة الاتصال onInfoWindowClose(Marker).
لتلقّي إشعار عند إغلاق نافذة المعلومات، استخدِم
OnInfoWindowCloseListener، والتي يمكنك
ضبطها من خلال استدعاء
GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener). ستتلقّى معاودة الاتصال onInfoWindowClose(Marker).
ملاحظة حول إعادة تحميل نافذة المعلومات: يتم تنشيط الحدث onInfoWindowClose() إذا
أعاد المستخدم تحميل نافذة معلومات من خلال النقر على علامة تتضمّن نافذة معلومات مفتوحة. ولكن إذا استدعيت آليًا Marker.showInfoWindow() على نافذة معلومات مفتوحة، لن يتم تنشيط الحدث onInfoWindowClose(). ويستند هذا السلوك الأخير إلى افتراض أنّك على عِلم بأنّ نافذة المعلومات ستُغلَق وتُعاد فتحها.
كما هو موضّح في القسم السابق حول نوافذ المعلومات، فإنّ نافذة المعلومات ليست طريقة عرض مباشرة. بدلاً من ذلك، يتم عرض طريقة العرض كصورة على الخريطة. نتيجةً لذلك، يتم تجاهل أي متتبِّعات تضبطها على طريقة العرض، ولا يمكنك التمييز بين أحداث ناتجة عن النقر على أجزاء مختلفة من طريقة العرض. ننصحك بعدم وضع مكوّنات تفاعلية، مثل الأزرار أو مربّعات الاختيار أو حقول إدخال النصوص، داخل نافذة المعلومات المخصّصة.