তথ্য উইন্ডো ম্যাপের উপরে পপ-আপ উইন্ডোতে টেক্সট বা ছবি দেখায়। তথ্য উইন্ডো সবসময় মার্কার-এর সাথে অ্যাঙ্কর করা থাকে। মার্কারে ট্যাপ করা হলে, সেটির ডিফল্ট আচরণ হল সেটি দেখানো।
কোডের নমুনা
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() if (melbourne?.isInfoWindowShown == true) { melbourne.hideInfoWindow() }
Java
final LatLng melbourneLatLng = new LatLng(-37.81319, 144.96298); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLatLng) .title("Melbourne")); melbourne.showInfoWindow(); if (melbourne.isInfoWindowShown()) { melbourne.hideInfoWindow(); }
এছাড়াও, আপনি প্রতিটি ক্লাস্টার করা মার্কারের জন্য তথ্য উইন্ডো তৈরি করতে পারবেন। আলাদা ক্লাস্টার করা মার্কারের জন্য তথ্য উইন্ডো যোগ করা সংক্রান্ত নির্দেশিকা পড়ুন।
কাস্টম তথ্য উইন্ডো
এছাড়াও, আপনি তথ্য উইন্ডোর কন্টেন্ট ও ডিজাইন কাস্টমাইজ করতে পারবেন। এটি করতে, আপনাকে অবশ্যই InfoWindowAdapter ইন্টারফেসের একটি কংক্রিট ইমপ্লিমেন্টেশন তৈরি করতে হবে এবং তারপরে আপনার
ইমপ্লিমেন্টেশনের সাথে
GoogleMap.setInfoWindowAdapter() কল করতে হবে। ইন্টারফেসে আপনার প্রয়োগ করার জন্য দুটি পদ্ধতি রয়েছে:
getInfoWindow(Marker) এবং getInfoContents(Marker)। API প্রথমে getInfoWindow(Marker)-এ কল করবে এবং null
রিটার্ন করা হলে, এটি তারপরে getInfoContents(Marker)-এ কল করবে। এটিও যদি
null, রিটার্ন করে তাহলে ডিফল্ট তথ্য উইন্ডো ব্যবহার করা হবে।
এর মধ্যে প্রথমটি (getInfoWindow()) আপনাকে এমন একটি ভিউ প্রদান করতে দেয় যা
সম্পূর্ণ তথ্য উইন্ডোর জন্য ব্যবহার করা হবে। এগুলির মধ্যে দ্বিতীয়টি
(getInfoContents()) আপনাকে শুধু উইন্ডোর কন্টেন্ট কাস্টমাইজ করতে দেয়
কিন্তু তারপরেও ডিফল্ট তথ্য উইন্ডো ফ্রেম ও ব্যাকগ্রাউন্ড রেখে দেয়।
নিচের ছবিতে ডিফল্ট তথ্য উইন্ডো, কাস্টমাইজ করা কন্টেন্ট সহ তথ্য উইন্ডো এবং কাস্টমাইজ করা ফ্রেম ও ব্যাকগ্রাউন্ড সহ তথ্য উইন্ডো দেখানো হয়েছে।
তথ্য উইন্ডো ইভেন্ট
MarkerDemoActivity স্যাম্পেল-এ তথ্য উইন্ডো ইভেন্ট রেজিস্টার ও ম্যানেজ করার জন্য কোডের উদাহরণ রয়েছে।
আপনি OnInfoWindowClickListener ব্যবহার করে
তথ্য উইন্ডোতে ক্লিক ইভেন্ট শুনতে পারেন। ম্যাপে এই লিসেনার সেট করতে,
GoogleMap.setOnInfoWindowClickListener(OnInfoWindowClickListener) কল করুন। কোনও ব্যবহারকারী
তথ্য উইন্ডোতে ক্লিক করলে, onInfoWindowClick(Marker) কল করা হয়
এবং তথ্য উইন্ডোটি ডিফল্ট হাইলাইট কালারে (ধূসর) হাইলাইট করা হয়।
Kotlin
map.setOnInfoWindowClickListener { marker -> Toast.makeText( context, "Info window clicked", Toast.LENGTH_SHORT ).show() }
Java
map.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { @Override public void onInfoWindowClick(Marker marker) { Toast.makeText(context, "Info window clicked", Toast.LENGTH_SHORT).show(); } });
একইভাবে, আপনি
OnInfoWindowLongClickListener-এর মাধ্যমে দীর্ঘক্ষণ ক্লিক করার ইভেন্ট শুনতে পারেন, যা আপনি
GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener)-এ কল করে
সেট করতে পারেন।
এই লিসনারটি ক্লিক লিসনারের মতোই আচরণ করে এবং onInfoWindowClose(Marker) কলব্যাক সহ
লং ক্লিক ইভেন্টে বিজ্ঞপ্তি পাবে।
তথ্য উইন্ডো বন্ধ হলে বিজ্ঞপ্তি পেতে, OnInfoWindowCloseListener ব্যবহার করুন, যা আপনি
GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener) কল করে
সেট করতে পারেন। আপনি
onInfoWindowClose(Marker) কলব্যাক পাবেন।
তথ্য উইন্ডো রিফ্রেশ করা সম্পর্কে মনে রাখার বিষয়: onInfoWindowClose() ইভেন্ট তখনই ফায়ার হয়, যদি
ব্যবহারকারী এমন কোনও মার্কার ট্যাপ করে তথ্য উইন্ডো রিফ্রেশ করেন, যেটিতে আগে থেকেই একটি খোলা
তথ্য উইন্ডো আছে। তবে, আপনি যদি খোলা তথ্য উইন্ডোতে প্রোগ্রাম্যাটিকভাবে Marker.showInfoWindow() কল করেন, তাহলে onInfoWindowClose() ইভেন্ট ফায়ার হয় না। পরবর্তী আচরণটি এই অনুমানের উপর ভিত্তি করে যে আপনি জানেন যে তথ্য উইন্ডোটি বন্ধ হবে এবং আবার খুলবে।
তথ্য উইন্ডো সম্পর্কে আগের বিভাগে যেমন উল্লেখ করা হয়েছে, তথ্য উইন্ডো কোনও লাইভ ভিউ নয়। পরিবর্তে, ম্যাপে ছবি হিসেবে ভিউ রেন্ডার করা হয়। এর ফলে, ভিউতে সেট করা কোনও লিসেনারকে উপেক্ষা করা হয় এবং আপনি ভিউয়ের বিভিন্ন অংশে ক্লিক ইভেন্টের মধ্যে পার্থক্য করতে পারবেন না। আপনাকে পরামর্শ দেওয়া হচ্ছে যে আপনার কাস্টম তথ্য উইন্ডোতে ইন্টার্যাক্টিভ কম্পোনেন্ট — যেমন বোতাম, চেকবক্স বা টেক্সট ইনপুট — রাখবেন না।