پنجره اطلاعات، نوشتار یا تصاویر را در پنجره بالاپر بالای نقشه نمایش میدهد. پنجرههای اطلاعات همیشه به یک نشانگر متصل هستند. رفتار پیشفرض آنها این است که وقتی روی نشانگر تکضرب زده میشود نمایش داده شوند.
نمونههای کد
مخزن ApiDemos در GitHub شامل نمونهای است که همه ویژگیهای پنجره اطلاعات را نشان میدهد:
- 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"), )
جاوا
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() }
جاوا
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() }
جاوا
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() اجرا نمیشود. رفتار دوم براساس این فرض است که شما میدانید پنجره اطلاعات بسته و دوباره باز خواهد شد.
همانطور که در بخش قبلی درباره پنجرههای اطلاعات ذکر شد، پنجره اطلاعات یک نمای زنده نیست. درعوض، نما بهصورت تصویر روی نقشه ارائه میشود. درنتیجه، هر شنوندهای که در نما تنظیم میکنید نادیده گرفته میشود و نمیتوانید بین رویدادهای کلیک در بخشهای مختلف نما تمایز قائل شوید. توصیه میشود عناصر تعاملی — مانند دکمهها، چارگوشهای انتخاب، یا ورودیهای نوشتاری — را در پنجره اطلاعات سفارشی خود قرار ندهید.