একটি তথ্য উইন্ডো মানচিত্রের উপরে একটি পপ-আপ উইন্ডোতে লেখা বা ছবি প্রদর্শন করে। তথ্য উইন্ডোগুলো সর্বদা একটি মার্কারের সাথে সংযুক্ত থাকে। এগুলোর ডিফল্ট আচরণ হলো, মার্কারটিতে ট্যাপ করা হলে তা প্রদর্শিত হওয়া।
কোডের নমুনা
গিটহাবে থাকা ApiDemos রিপোজিটরিতে একটি নমুনা রয়েছে যা তথ্য উইন্ডোর সমস্ত বৈশিষ্ট্য প্রদর্শন করে:
- MarkerDemoActivity - Java : তথ্য উইন্ডো কাস্টমাইজ করা এবং তথ্য উইন্ডো লিসেনার ব্যবহার করা
- MarkerDemoActivity - Kotlin : তথ্য উইন্ডো কাস্টমাইজ করা এবং তথ্য উইন্ডো লিসেনার ব্যবহার করা
ভূমিকা
যখন ব্যবহারকারী কোনো মার্কারে ট্যাপ করেন, তখন একটি তথ্য উইন্ডো তাকে তথ্য প্রদর্শন করে। একবারে শুধুমাত্র একটি তথ্য উইন্ডো প্রদর্শিত হয়। যদি কোনো ব্যবহারকারী একটি মার্কারে ক্লিক করেন, তাহলে বর্তমান তথ্য উইন্ডোটি বন্ধ হয়ে যাবে এবং নতুন তথ্য উইন্ডোটি প্রদর্শিত হবে। উল্লেখ্য যে, যদি ব্যবহারকারী এমন কোনো মার্কারে ক্লিক করেন যেখানে বর্তমানে একটি তথ্য উইন্ডো প্রদর্শিত হচ্ছে, তাহলে সেই তথ্য উইন্ডোটি বন্ধ হয়ে আবার খুলে যায়।
ডিভাইসের স্ক্রিনের বিপরীতে, এর সংশ্লিষ্ট মার্কারের ঠিক উপরে মাঝখানে একটি তথ্য উইন্ডো আঁকা হয়। ডিফল্ট তথ্য উইন্ডোতে শিরোনামটি গাঢ় অক্ষরে থাকে এবং শিরোনামের নিচে (ঐচ্ছিক) সংক্ষিপ্ত পাঠ্যাংশটি দেওয়া থাকে।
একটি তথ্য উইন্ডো যোগ করুন
একটি তথ্য উইন্ডো যোগ করার সবচেয়ে সহজ উপায় হলো সংশ্লিষ্ট মার্কারের title() এবং snippet() মেথড সেট করা। এই প্রোপার্টিগুলো সেট করলে, যখনই সেই মার্কারটিতে ক্লিক করা হবে, একটি তথ্য উইন্ডো প্রদর্শিত হবে।
কোটলিন
val melbourneLatLng = LatLng(-37.81319, 144.96298) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLatLng) .title("Melbourne") .snippet("Population: 4,137,400") )
জাভা
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() কল করে একটি ইনফো উইন্ডো লুকানো যায়।
কোটলিন
val melbourneLatLng = LatLng(-37.81319, 144.96298) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLatLng) .title("Melbourne") ) melbourne?.showInfoWindow()
জাভা
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) কল করা হয় এবং ইনফো উইন্ডোটি ডিফল্ট হাইলাইট রঙে (ধূসর) হাইলাইট হয়।
কোটলিন
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() } }
জাভা
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() ইভেন্টটি ফায়ার হয় না। এই পরবর্তী আচরণটি এই অনুমানের উপর ভিত্তি করে যে, আপনি অবগত আছেন যে ইনফো উইন্ডোটি বন্ধ হয়ে আবার খুলবে।
ইনফো উইন্ডো সম্পর্কিত পূর্ববর্তী বিভাগে যেমন উল্লেখ করা হয়েছে, একটি ইনফো উইন্ডো কোনো লাইভ ভিউ নয়। বরং, ভিউটি ম্যাপের উপর একটি ছবি হিসেবে রেন্ডার করা হয়। ফলে, ভিউটিতে আপনি যে কোনো লিসেনার সেট করলে তা অগ্রাহ্য করা হয় এবং আপনি ভিউটির বিভিন্ন অংশের ক্লিক ইভেন্টগুলোর মধ্যে পার্থক্য করতে পারেন না। আপনাকে আপনার কাস্টম ইনফো উইন্ডোর মধ্যে ইন্টারেক্টিভ কম্পোনেন্ট—যেমন বাটন, চেকবক্স বা টেক্সট ইনপুট—না রাখার পরামর্শ দেওয়া হচ্ছে।