نوافذ المعلومات

اختيار النظام الأساسي: Android‏ iOS‏ JavaScript‏

تعرض نافذة المعلومات نصًا أو صورًا في نافذة منبثقة فوق الخريطة. يتم دائمًا تثبيت نوافذ المعلومات على علامة. والإعداد التلقائي لها هو عرضها عند النقر على العلامة.

عيّنات تعليمات برمجية

يتضمّن مستودع 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(). يستند السلوك الأخير إلى افتراض أنّك على علم بأنّ نافذة المعلومات ستُغلق وتُفتح من جديد.

كما ذكرنا في القسم السابق حول نوافذ المعلومات، فإن نافذة المعلومات ليست عرضًا مباشرًا. بدلاً من ذلك، يتم عرض العرض كصورة على الخريطة. ونتيجةً لذلك، يتم تجاهل أي متتبِّعين قمت بتعيينهم في العرض ولا يمكنك التمييز بين أحداث ناتجة عن النقر على أجزاء مختلفة من العرض. ننصحك بعدم وضع مكوّنات تفاعلية، مثل الأزرار أو مربّعات الاختيار أو حقول إدخال النص، ضمن نافذة المعلومات المخصّصة.