חלון מידע

בחירת פלטפורמה: Android iOS JavaScript

חלון מידע מציג טקסט או תמונות בחלון קופץ מעל המפה. חלונות מידע תמיד מקושרים לסמן. התנהגות ברירת המחדל שלהם היא להציג כאשר מקישים על הסמן.

דוגמאות קוד

במאגר ApiDemos ב-GitHub יש דוגמה שמדגימה את כל התכונות של חלון המידע:

  • MarkerDemoActivity – Java: התאמה אישית של חלונות מידע ושימוש בפונקציות listener לחלונות מידע
  • MarkerDemoActivity – Kotlin: התאמה אישית של חלונות מידע ושימוש בפונקציות listener לחלונות מידע

מבוא

חלון מידע מאפשר להציג מידע למשתמש כשהוא מקיש על סמן. רק חלון מידע אחד מוצג בכל פעם. אם משתמש לוחץ על סמן, חלון המידע הנוכחי ייסגר וחלון המידע החדש יוצג. שימו לב שאם המשתמש לוחץ על סמן שמציג כרגע חלון מידע, חלון המידע הזה נסגר ונפתח מחדש.

חלון מידע משורטט מסביב למסך של המכשיר, ממורכז מעל הסמן המשויך אליו. ברירת המחדל של חלון המידע מכילה את הכותרת בגופן מודגש, כאשר קטע הטקסט (אופציונלי) מכיל את הטקסט מתחת לכותרת.

הוספת חלון מידע

הדרך הפשוטה ביותר להוסיף חלון מידע היא להגדיר את השיטות 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). קודם ה-API יפעיל את getInfoWindow(Marker), ואם הוא מוחזר null, הוא יבצע קריאה ל-getInfoContents(Marker). אם הפעולה הזו תחזיר גם null, ייעשה שימוש בחלון המידע שמוגדר כברירת מחדל.

השדה הראשון (getInfoWindow()) מאפשר ליצור תצוגה שתשמש את חלון המידע כולו. האפשרות השנייה (getInfoContents()) מאפשרת לכם להתאים אישית את התוכן של החלון, אבל להשאיר את המסגרת ואת הרקע של חלון המידע שמוגדרים כברירת מחדל.

התמונות שלמטה מציגות חלון מידע המוגדר כברירת מחדל, חלון מידע עם תוכן מותאם אישית וחלון מידע עם מסגרת ורקע מותאמים אישית.

השוואה בין חלונות מידע

אירועים של חלון מידע

דוגמת MarkerDemoActivity כוללת קוד לדוגמה לרישום ולטיפול באירועים של חלון מידע.

אפשר להשתמש ב-OnInfoWindowClickListener כדי להאזין לאירועי לחיצה בחלון מידע. כדי להגדיר את ה-listener הזה במפה, התקשרו אל 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). ה-listener הזה מתנהג בדומה ל-click listener, והוא יקבל הודעה על אירועים מסוג קליק ארוך באמצעות קריאה חוזרת (callback) של onInfoWindowClose(Marker).

כדי לקבל התראה כשחלון המידע נסגר, משתמשים ב-OnInfoWindowCloseListener, שאותו אפשר להגדיר באמצעות קריאה ל-GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener). תקבלו קריאה חוזרת (callback) של onInfoWindowClose(Marker).

הערה לגבי רענון של חלון מידע: האירוע onInfoWindowClose() מופעל אם המשתמש מרענן חלון מידע על ידי הקשה על סמן שכבר יש לו חלון מידע פתוח. אבל אם תבצעו קריאה פרוגרמטית אל Marker.showInfoWindow() בחלון מידע פתוח, האירוע onInfoWindowClose() לא יופעל. ההתנהגות השנייה מבוססת על ההנחה שאתם מודעים לכך שחלון המידע ייסגר וייפתח מחדש.

כפי שצוין בקטע הקודם לגבי חלונות מידע, חלון מידע אינו תצוגה פעילה. במקום זאת, התצוגה מוצגת כתמונה במפה. כתוצאה מכך, המערכת מתעלמת מהמאזינים שהגדרתם בתצוגה ולא ניתן להבחין בין אירועי קליק בחלקים שונים של התצוגה. מומלץ לא למקם רכיבים אינטראקטיביים כמו לחצנים, תיבות סימון או קלט של טקסט בתוך חלון המידע המותאם אישית.