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