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

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

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