חלונות מידע

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

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

דוגמאות קוד

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

מבוא

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

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

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

הדרך הפשוטה ביותר להוסיף חלון מידע היא להגדיר את השיטות 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()
if (melbourne?.isInfoWindowShown == true) {
    melbourne.hideInfoWindow()
}

      

Java

final LatLng melbourneLatLng = new LatLng(-37.81319, 144.96298);
Marker melbourne =
        map.addMarker(new MarkerOptions().position(melbourneLatLng).title("Melbourne"));
melbourne.showInfoWindow();
if (melbourne.isInfoWindowShown()) {
    melbourne.hideInfoWindow();
}

      

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

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

אתם יכולים גם להתאים אישית את התוכן והעיצוב של חלונות המידע. כדי לעשות את זה, צריך ליצור הטמעה קונקרטית של הממשק InfoWindowAdapter ואז להפעיל את GoogleMap.setInfoWindowAdapter() עם ההטמעה. הממשק מכיל שתי שיטות להטמעה: getInfoWindow(Marker) ו-getInfoContents(Marker). ה-API יפעיל קודם את getInfoWindow(Marker), ואם יוחזר הערך null, הוא יפעיל את getInfoContents(Marker). אם גם הפונקציה הזו מחזירה את הערך null, המערכת תשתמש בחלון המידע שמוגדר כברירת מחדל.

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

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

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

אירועים בחלון המידע

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

אפשר להשתמש ב-OnInfoWindowClickListener כדי להאזין לאירועים מסוג קליק בחלון מידע. כדי להגדיר את המאזין הזה במפה, צריך להפעיל את GoogleMap.setOnInfoWindowClickListener(OnInfoWindowClickListener). כשמשתמש לוחץ על חלון מידע, מתבצעת קריאה ל-onInfoWindowClick(Marker) וחלון המידע מודגש בצבע ברירת המחדל (אפור).

Kotlin

map.setOnInfoWindowClickListener { marker ->
    Toast.makeText(
        context,
        "Info window clicked",
        Toast.LENGTH_SHORT,
    ).show()
}

      

Java

map.setOnInfoWindowClickListener(
        new GoogleMap.OnInfoWindowClickListener() {
            @Override
            public void onInfoWindowClick(Marker marker) {
                Toast.makeText(context, "Info window clicked", Toast.LENGTH_SHORT).show();
            }
        });

      

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

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

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

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