تعرض نافذة المعلومات نصًا أو صورًا في نافذة منبثقة أعلى الخريطة. وتكون نافذة المعلومات دائمًا مثبّتة بعلامة. ويتم عرضها تلقائيًا عند النقر على العلامة.
عيّنات تعليمات برمجية
يتضمّن مستودع 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()
جافا
final LatLng melbourneLatLng = new LatLng(-37.81319, 144.96298); Marker melbourne = map.addMarker( new 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)
ويتم تمييز نافذة المعلومات بلون التمييز التلقائي (الرمادي).
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() } }
جافا
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(); } }
وبالمثل، يمكنك الاستماع إلى أحداث النقر مع الاستمرار باستخدام الـ
OnInfoWindowLongClickListener، الذي يمكنك
ضبطه من خلال استدعاء
GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener).
يتصرف هذا المتتبِّع بشكل مشابه لمتتبِّع النقرات وسيتم إعلامه بأحداث النقر مع الاستمرار باستخدام معاودة الاتصال
onInfoWindowClose(Marker).
لتلقّي إشعار عند إغلاق نافذة المعلومات، استخدِم
OnInfoWindowCloseListener، الذي يمكنك
ضبطه من خلال استدعاء
GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener). ستتلقّى معاودة الاتصال onInfoWindowClose(Marker).
ملاحظة حول إعادة تحميل نافذة المعلومات: يتم تنشيط حدث onInfoWindowClose() إذا
أعاد المستخدم تحميل نافذة معلومات من خلال النقر على علامة تتضمّن نافذة معلومات مفتوحة. ولكن إذا استدعيت آليًا Marker.showInfoWindow() على نافذة معلومات مفتوحة، لن يتم تنشيط حدث onInfoWindowClose(). يستند هذا السلوك الأخير إلى افتراض أنّك على عِلم بأنّ نافذة المعلومات ستُغلَق وتُعاد فتحها.
كما هو موضّح في القسم السابق حول نوافذ المعلومات، ليست نافذة المعلومات طريقة عرض مباشرة. بدلاً من ذلك، يتم عرض طريقة العرض كصورة على الخريطة. نتيجةً لذلك، يتم تجاهل أي مستمعين تضبطهم على طريقة العرض ولا يمكنك التمييز بين أحداث النقر على أجزاء مختلفة من طريقة العرض. ننصحك بعدم وضع مكوّنات تفاعلية، مثل الأزرار أو مربّعات الاختيار أو حقول إدخال النصوص، داخل نافذة المعلومات المخصّصة.