जानकारी वाली विंडो, मैप के ऊपर दिखने वाली पॉप-अप विंडो में टेक्स्ट या इमेज दिखाती है. जानकारी वाली विंडो हमेशा किसी मार्करसे जुड़ी होती है. डिफ़ॉल्ट तौर पर, मार्कर पर टैप करने पर जानकारी वाली विंडो दिखती है.
कोड सैंपल
GitHub पर मौजूद ApiDemos repository में, एक ऐसा सैंपल है जो जानकारी वाली विंडो की सभी सुविधाओं के बारे में बताता है:
- 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). एपीआई पहले getInfoWindow(Marker) को कॉल करेगा. अगर null मिलता है, तो वह getInfoContents(Marker) को कॉल करेगा. अगर इससे भी null मिलता है, तो जानकारी वाली डिफ़ॉल्ट विंडो का इस्तेमाल किया जाएगा.
इनमें से पहले तरीके (getInfoWindow()) की मदद से, ऐसा व्यू दिया जा सकता है जिसका
इस्तेमाल जानकारी वाली पूरी विंडो के लिए किया जाएगा. इनमें से दूसरे तरीके
(getInfoContents()) की मदद से, सिर्फ़ विंडो के कॉन्टेंट को पसंद के मुताबिक बनाया जा सकता है
. हालांकि, जानकारी वाली डिफ़ॉल्ट विंडो का फ़्रेम और बैकग्राउंड अब भी इस्तेमाल किया जा सकता है.
नीचे दी गई इमेज में, जानकारी वाली डिफ़ॉल्ट विंडो, पसंद के मुताबिक कॉन्टेंट वाली जानकारी वाली विंडो, और पसंद के मुताबिक फ़्रेम और बैकग्राउंड वाली जानकारी वाली विंडो दिखाई गई है.
जानकारी वाली विंडो के इवेंट
MarkerDemoActivity सैंपल में, जानकारी वाली विंडो के इवेंट रजिस्टर करने और उन्हें मैनेज करने के लिए, कोड का उदाहरण शामिल है.
जानकारी वाली विंडो पर होने वाले क्लिक इवेंट को सुनने के लिए, OnInfoWindowClickListener का इस्तेमाल किया जा सकता है. मैप पर इस लिसनर को सेट करने के लिए,
कॉल करें 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) को कॉल कर सकते हैं.
यह लिसनर, क्लिक लिसनर की तरह काम करता है. साथ ही, लंबे समय तक क्लिक करने वाले इवेंट के लिए,
onInfoWindowClose(Marker) कॉलबैक के साथ सूचना देगा.
जानकारी वाली विंडो बंद होने पर सूचना पाने के लिए, OnInfoWindowCloseListener का इस्तेमाल करें. इसे
सेट करने के लिए, GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener) को कॉल करें. आपको
onInfoWindowClose(Marker) कॉलबैक मिलेगा.
जानकारी वाली विंडो को रीफ़्रेश करने के बारे में ध्यान दें: अगर कोई उपयोगकर्ता, पहले से खुली जानकारी वाली विंडो वाले मार्कर पर टैप करके, जानकारी वाली विंडो को रीफ़्रेश करता है, तो onInfoWindowClose() इवेंट ट्रिगर होता है. हालांकि, अगर प्रोग्राम के ज़रिए, खुली जानकारी वाली विंडो पर Marker.showInfoWindow() को कॉल किया जाता है, तो onInfoWindowClose() इवेंट ट्रिगर नहीं होता. दूसरे मामले में, यह माना जाता है कि आपको पता है कि जानकारी वाली विंडो बंद होगी और फिर से खुलेगी.
जानकारी वाली विंडो के बारे में पिछले सेक्शन में बताया गया है कि जानकारी वाली विंडो, लाइव व्यू नहीं होती. इसके बजाय, व्यू को मैप पर इमेज के तौर पर रेंडर किया जाता है. इसलिए, व्यू पर सेट किए गए किसी भी लिसनर को अनदेखा कर दिया जाता है. साथ ही, व्यू के अलग-अलग हिस्सों पर होने वाले क्लिक इवेंट के बीच अंतर नहीं किया जा सकता. सलाह दी जाती है कि जानकारी वाली कस्टम विंडो में, इंटरैक्टिव कॉम्पोनेंट न जोड़ें. जैसे, बटन, चेकबॉक्स या टेक्स्ट इनपुट.