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

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

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

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

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

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