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