חלון מידע

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

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