تعرض نافذة المعلومات النص أو الصور في نافذة منبثقة أعلى الخريطة. يتم إرساء نوافذ المعلومات دائمًا على علامة. ويكون سلوكهم الافتراضي هو العرض عند النقر على العلامة.
عيّنات تعليمات برمجية
يتضمن مستودع ApiDemos على GitHub نموذجًا يعرض جميع ميزات نافذة المعلومات:
- MarkerDemoActivity - Java: تخصيص نوافذ المعلومات واستخدام أدوات معالجة نافذة المعلومات
- MarkerDemoActivity - Kotlin: تخصيص نوافذ المعلومات واستخدام أدوات معالجة نافذة المعلومات
المقدمة
تتيح لك نافذة المعلومات عرض معلومات للمستخدم عندما ينقر على علامة. يتم عرض نافذة معلومات واحدة فقط في كل مرة. إذا نقر أحد المستخدمين على علامة، فسيتم إغلاق نافذة المعلومات الحالية وسيتم عرض نافذة المعلومات الجديدة. وتجدر الإشارة إلى أنه إذا نقر المستخدم على علامة تعرض في الوقت الحالي نافذة معلومات، يتم إغلاق نافذة المعلومات ثم إعادة فتحها.
يتم رسم نافذة معلومات موجهة نحو شاشة الجهاز، في المنتصف فوق العلامة المرتبطة بها. تحتوي نافذة المعلومات الافتراضية على العنوان بالخط الغامق، مع نص مقتطف (اختياري) أسفل العنوان.
إضافة نافذة معلومات
إن أبسط طريقة لإضافة نافذة معلومات هي ضبط طريقتي title()
وsnippet()
للعلامة المناسبة. وسيؤدي تعيين هذه الخصائص إلى ظهور نافذة معلومات عند النقر على تلك العلامة.
لغة Java
final LatLng melbourneLatLng = new LatLng(-37.81319, 144.96298); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLatLng) .title("Melbourne") .snippet("Population: 4,137,400"));
Kotlin
val melbourneLatLng = LatLng(-37.81319, 144.96298) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLatLng) .title("Melbourne") .snippet("Population: 4,137,400") )
إظهار/إخفاء نافذة معلومات
تم تصميم نوافذ المعلومات للاستجابة لأحداث لمس المستخدم. يمكنك عرض نافذة معلومات آليًا، إذا كنت تفضّل ذلك، من خلال استدعاء
showInfoWindow()
على علامة الهدف. يمكن إخفاء نافذة المعلومات من خلال الاتصال بالرقم
hideInfoWindow()
.
لغة Java
final LatLng melbourneLatLng = new LatLng(-37.81319, 144.96298); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLatLng) .title("Melbourne")); melbourne.showInfoWindow();
Kotlin
val melbourneLatLng = LatLng(-37.81319, 144.96298) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLatLng) .title("Melbourne") ) melbourne?.showInfoWindow()
ويمكنك أيضًا إنشاء نوافذ معلومات لعلامات مُجمَّعة فردية. اقرأ الدليل من أجل إضافة نافذة معلومات للعلامات المجمّعة الفردية.
نوافذ المعلومات المخصصة
يمكنك أيضًا تخصيص المحتويات وتصميم نوافذ المعلومات. ولإجراء ذلك، عليك إنشاء تنفيذ ملموس لواجهة
InfoWindowAdapter
ثم استدعاء
GoogleMap.setInfoWindowAdapter()
باستخدام
واجهة التنفيذ. تحتوي الواجهة على طريقتين لتنفيذهما:
getInfoWindow(Marker)
وgetInfoContents(Marker)
. ستطلب واجهة برمجة التطبيقات أولاً الرقم getInfoWindow(Marker)
، وإذا تم عرض null
، سيتم استدعاء الدالة getInfoContents(Marker)
. إذا كانت هذه العملية تؤدي أيضًا إلى ظهور
null
، سيتم استخدام نافذة المعلومات التلقائية.
يتيح لك الأول (getInfoWindow()
) توفير طريقة عرض سيتم استخدامها في نافذة المعلومات بالكامل. ويتيح لك العنصر الثاني
(getInfoContents()
) تخصيص محتوى النافذة فقط
مع الاحتفاظ بإطار نافذة المعلومات التلقائية والخلفية.
تعرض الصور أدناه نافذة معلومات افتراضية ونافذة معلومات تتضمن محتوى مخصصًا ونافذة معلومات بها إطار مخصص وخلفية مخصصة.

أحداث نافذة المعلومات
يتضمّن نموذج MarkerDemoActivity مثالاً على رمز لتسجيل أحداث نافذة المعلومات ومعالجتها.
يمكنك استخدام أداة OnInfoWindowClickListener
للاستماع إلى الأحداث من خلال النقر عليها في نافذة المعلومات. لضبط أداة معالجة البيانات هذه على الخريطة،
اتصل برقم GoogleMap.setOnInfoWindowClickListener(OnInfoWindowClickListener)
. عندما ينقر المستخدم على إحدى نوافذ المعلومات، يتم استدعاء onInfoWindowClick(Marker)
ويتم تمييز نافذة المعلومات بلون التظليل التلقائي (باللون الرمادي).
لغة Java
class InfoWindowActivity extends AppCompatActivity implements GoogleMap.OnInfoWindowClickListener, OnMapReadyCallback { @Override public void onMapReady(GoogleMap googleMap) { // Add markers to the map and do other map setup. // ... // Set a listener for info window events. googleMap.setOnInfoWindowClickListener(this); } @Override public void onInfoWindowClick(Marker marker) { Toast.makeText(this, "Info window clicked", Toast.LENGTH_SHORT).show(); } }
Kotlin
internal inner class InfoWindowActivity : AppCompatActivity(), OnInfoWindowClickListener, OnMapReadyCallback { override fun onMapReady(googleMap: GoogleMap) { // Add markers to the map and do other map setup. // ... // Set a listener for info window events. googleMap.setOnInfoWindowClickListener(this) } override fun onInfoWindowClick(marker: Marker) { Toast.makeText( this, "Info window clicked", Toast.LENGTH_SHORT ).show() } }
بالمثل، يمكنك الاستماع إلى الأحداث التي تتضمّن نقرات طويلة باستخدام
OnInfoWindowLongClickListener
،
الذي يمكنك ضبطه من خلال الاتصال على
GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener)
.
يتصرف هذا المستمع بالطريقة نفسها التي تعمل بها أداة معالجة النقرات، وسيتم إشعاره في
أحداث النقرات الطويلة من خلال رد اتصال على onInfoWindowClose(Marker)
.
لتلقّي إشعار عند إغلاق نافذة المعلومات، استخدِم OnInfoWindowCloseListener
الذي يمكنك ضبطه من خلال الاتصال بالرقم GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener)
. ستتلقى
معاودة اتصال من onInfoWindowClose(Marker)
.
ملاحظة بشأن إعادة تحميل نافذة المعلومات: يتم تنشيط حدث onInfoWindowClose()
في حال
إعادة تحميل نافذة المعلومات من خلال النقر على علامة تشير إلى
نافذة معلومات مفتوحة من قبل. ولكن إذا اتصلت بـ Marker.showInfoWindow()
برمجيًا في
نافذة معلومات مفتوحة، لن يتم تنشيط حدث onInfoWindowClose()
. ويستند هذا السلوك الأخير
إلى افتراض أنك تدرك أنّ نافذة المعلومات
ستغلق ثم تُفتح من جديد.
كما ذكرنا في القسم السابق في نوافذ المعلومات، فإن نافذة المعلومات ليست عرضًا مباشرًا. بدلاً من ذلك، يتم عرض العرض كصورة على الخريطة. ونتيجةً لذلك، يتم تجاهل أي مستمعين تضبطهم في طريقة العرض، ولا يمكنك التمييز بين أحداث النقرات على أجزاء مختلفة من طريقة العرض. ويُنصح بعدم وضع مكوّنات تفاعلية - مثل الأزرار أو مربعات الاختيار أو مدخلات النص - داخل نافذة المعلومات المخصصة.