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

اختَر النظام الأساسي: 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")
)

      

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"));

      

إظهار/إخفاء نافذة معلومات

تم تصميم نوافذ المعلومات للاستجابة إلى أحداث لمس المستخدم. يمكنك عرض نافذة معلومات بشكل آلي من خلال استدعاء showInfoWindow() على العلامة المستهدفة. يمكن إخفاء نافذة معلومات من خلال طلب الرقم hideInfoWindow().

Kotlin



val melbourneLatLng = LatLng(-37.81319, 144.96298)
val melbourne = map.addMarker(
    MarkerOptions()
        .position(melbourneLatLng)
        .title("Melbourne")
)
melbourne?.showInfoWindow()

      

Java


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()
    }
}

      

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();
    }
}

      

وبالمثل، يمكنك الاستماع إلى الأحداث التي يتم النقر عليها لمدة طويلة باستخدام OnInfoWindowLongClickListener، والتي يمكنك ضبطها من خلال طلب رمز GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener). يتشابه سلوك أداة معالجة النقرات هذه مع أداة معالجة النقرات، وسيتمّ إرسال إشعار إلى هذه الأحداث التي يتم فيها النقر لمدة طويلة من خلال معاودة الاتصال في onInfoWindowClose(Marker).

لتلقّي إشعار عند إغلاق نافذة المعلومات، استخدِم OnInfoWindowCloseListener التي يمكنك ضبطها من خلال الاتصال على GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener). سيصلك مكالمة بشأن onInfoWindowClose(Marker).

ملاحظة بشأن إعادة تحميل نافذة المعلومات: يتم تنشيط حدث onInfoWindowClose() إذا أعاد المستخدم تحميل نافذة معلومات من خلال النقر على علامة تتضمّن نافذة معلومات مفتوحة. ولكن إذا اتصلت آليًا بـ Marker.showInfoWindow() في نافذة معلومات مفتوحة، لن يتم تنشيط الحدث onInfoWindowClose(). ويعتمد السلوك الأخير على افتراض أنّك على دراية بأنّ نافذة المعلومات سيتم إغلاقها وإعادة فتحها.

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