חלון מידע

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

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

דוגמאות קוד

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

  • MarkerDemoActivity - Java: התאמה אישית של חלונות מידע ושימוש בכלים להאזנה לחלונות מידע
  • MarkerDemoActivity - Kotlin: התאמה אישית של חלונות מידע ושימוש במאזינים לחלונות מידע

מבוא

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

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

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

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

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

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