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

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

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