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

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