חלון מידע

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
בחירת פלטפורמה: Android iOS JavaScript

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

דוגמאות קוד

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

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

מבוא

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

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

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

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

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"));

      

Kotlin


val melbourneLatLng = LatLng(-37.81319, 144.96298)
val melbourne = map.addMarker(
    MarkerOptions()
        .position(melbourneLatLng)
        .title("Melbourne")
        .snippet("Population: 4,137,400")
)

      

הצגה/הסתרה של חלון מידע

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

Java


final LatLng melbourneLatLng = new LatLng(-37.81319, 144.96298);
Marker melbourne = map.addMarker(
    new MarkerOptions()
        .position(melbourneLatLng)
        .title("Melbourne"));
melbourne.showInfoWindow();

      

Kotlin


val melbourneLatLng = LatLng(-37.81319, 144.96298)
val melbourne = map.addMarker(
    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) וחלון המידע מודגש בצבע ברירת המחדל (אפור).

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();
    }
}

      

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()
    }
}

      

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

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

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

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