חלון מידע

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

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