חלונות מידע

בחירת פלטפורמה: 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()

      

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

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

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