חלון מידע

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

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

דוגמאות קוד

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

מבוא

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

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

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

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

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

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

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