ম্যাপের উপরে পপ-আপ উইন্ডোতে তথ্য উইন্ডো টেক্সট বা ছবি দেখায়। তথ্য উইন্ডো সবসময় চিহ্ন-এর সাথে অ্যাঙ্কর করা থাকে। মার্কার ট্যাপ করা হলে ডিফল্ট অ্যাকশন হিসেবে এটি দেখানো হয়।
কোডের নমুনা
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() ইভেন্ট ফায়ার হয় না। পরবর্তী আচরণটি এই অনুমানের উপর ভিত্তি করে যে আপনি জানেন যে তথ্য উইন্ডোটি বন্ধ হবে এবং আবার খুলবে।
তথ্য উইন্ডো সম্পর্কে আগের বিভাগে যেমন উল্লেখ করা হয়েছে, তথ্য উইন্ডো কোনও লাইভ ভিউ নয়। পরিবর্তে, ম্যাপে ছবি হিসেবে ভিউ রেন্ডার করা হয়। এর ফলে, ভিউতে সেট করা কোনও লিসেনারকে উপেক্ষা করা হয় এবং ভিউয়ের বিভিন্ন অংশে ক্লিক ইভেন্টের মধ্যে আপনি পার্থক্য করতে পারবেন না। আপনাকে সাজেস্ট করা হচ্ছে যে কাস্টম তথ্য উইন্ডোতে ইন্টার্যাক্টিভ কম্পোনেন্ট — যেমন বোতাম, চেকবক্স বা টেক্সট ইনপুট — রাখবেন না।