Bilgi penceresi, haritanın üzerindeki bir pop-up pencerede metin veya resim gösterir. Bilgi pencereleri her zaman bir işaretçiye sabitlenir. Varsayılan davranışları, işaretçiye dokunulduğunda gösterilmektir.
Kod örnekleri
GitHub'daki ApiDemos deposu, tüm bilgi penceresi özelliklerini gösteren bir örnek içerir:
- MarkerDemoActivity - Java: Bilgi pencerelerini özelleştirme ve bilgi penceresi işleyicileri kullanma
- MarkerDemoActivity - Kotlin: Bilgi pencerelerini özelleştirme ve bilgi penceresi dinleyicilerini kullanma
Giriş
Bilgi penceresi, kullanıcı bir işaretçiye dokunduğunda kullanıcıya bilgi göstermenize olanak tanır. Aynı anda yalnızca bir bilgi penceresi görüntülenir. Kullanıcı bir işaretçiyi tıklarsa mevcut bilgi penceresi kapatılır ve yeni bilgi penceresi gösterilir. Kullanıcı, bilgi penceresi gösterilen bir işaretçiyi tıkladığında bilgi penceresinin kapanıp yeniden açıldığını unutmayın.
Cihaz ekranına dayalı olarak, ilişkili işaretçisinin üzerinde ortalanmış olarak bir bilgi penceresi çizilir. Varsayılan bilgi penceresinde, başlığın kalın olarak gösterildiği ve başlığın altında (isteğe bağlı) snippet metninin yer aldığı bir alan bulunur.
Bilgi penceresi ekleme
Bilgi penceresi eklemenin en basit yolu, ilgili işaretçinin title()
ve snippet()
yöntemlerini ayarlamaktır. Bu özelliklerin ayarlanması, söz konusu işaretçi her tıklandığında bilgi penceresinin görünmesine neden olur.
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"));
Bilgi penceresini gösterme/gizleme
Bilgi pencereleri, kullanıcı dokunma etkinliklerine yanıt vermek üzere tasarlanmıştır. Dilerseniz hedef işaretçide showInfoWindow()
işlevini çağırarak bilgi penceresini programatik olarak gösterebilirsiniz. Bilgi penceresi, hideInfoWindow()
çağrısı yapılarak gizlenebilir.
Kotlin
val melbourneLatLng = LatLng(-37.81319, 144.96298) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLatLng) .title("Melbourne") ) melbourne?.showInfoWindow()
Java
final LatLng melbourneLatLng = new LatLng(-37.81319, 144.96298); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLatLng) .title("Melbourne")); melbourne.showInfoWindow();
Ayrıca, tek tek kümelenmiş işaretçiler için bilgi pencereleri de oluşturabilirsiniz. Gruplandırılmış işaretçiler için bilgi penceresi ekleme kılavuzunu okuyun.
Özel bilgi pencereleri
Bilgi pencerelerinin içeriklerini ve tasarımını da özelleştirebilirsiniz. Bunu yapmak için InfoWindowAdapter
arayüzünün somut bir uygulamasını oluşturmanız ve ardından uygulamanızla birlikte GoogleMap.setInfoWindowAdapter()
'i çağırmanız gerekir. Arayüzde, uygulayabileceğiniz iki yöntem bulunur:
getInfoWindow(Marker)
ve getInfoContents(Marker)
. API önce getInfoWindow(Marker)
işlevini çağırır ve null
döndürülürse getInfoContents(Marker)
işlevini çağırır. Bu da null
döndürürse varsayılan bilgi penceresi kullanılır.
Bunlardan ilki (getInfoWindow()
), bilgi penceresinin tamamı için kullanılacak bir görünüm sağlamanıza olanak tanır. Bunlardan ikincisi (getInfoContents()
), pencerenin içeriğini özelleştirmenize ancak varsayılan bilgi penceresi çerçevesini ve arka planını korumanıza olanak tanır.
Aşağıdaki resimlerde varsayılan bir bilgi penceresi, özelleştirilmiş içeriğe sahip bir bilgi penceresi ve özelleştirilmiş çerçeveye ve arka plana sahip bir bilgi penceresi gösterilmektedir.
Bilgi penceresi etkinlikleri
MarkerDemoActivity örneği, bilgi penceresi etkinliklerini kaydetme ve işleme yönelik örnek kod içerir.
Bilgi penceresindeki tıklama etkinliklerini dinlemek için OnInfoWindowClickListener
kullanabilirsiniz. Bu dinleyiciyi haritada ayarlamak için GoogleMap.setOnInfoWindowClickListener(OnInfoWindowClickListener)
numaralı telefonu arayın. Kullanıcı bir bilgi penceresini tıkladığında onInfoWindowClick(Marker)
çağrılır ve bilgi penceresi varsayılan vurgu renginde (gri) vurgulanır.
Kotlin
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() } }
Java
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(); } }
Benzer şekilde, uzun tıklama etkinliklerini bir OnInfoWindowLongClickListener
ile dinleyebilirsiniz. GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener)
öğesini çağırarak bunu ayarlayabilirsiniz.
Bu dinleyici, tıklama işleyiciye benzer şekilde çalışır ve uzun tıklama etkinliklerinde onInfoWindowClose(Marker)
geri çağırma işlevi ile bilgilendirilir.
Bilgi penceresi kapandığında bildirim almak için GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener)
işlevini çağırarak ayarlayabileceğiniz bir OnInfoWindowCloseListener
kullanın. onInfoWindowClose(Marker)
numaralı telefondan geri aranırsınız.
Bilgi penceresini yenilemeyle ilgili not: Kullanıcı, açık bir bilgi penceresi bulunan bir işaretçiye dokunarak bilgi penceresini yenilerse onInfoWindowClose()
etkinliği tetiklenir. Ancak açık bir bilgi penceresinde Marker.showInfoWindow()
'ü programatik olarak çağırırsanız onInfoWindowClose()
etkinliği tetiklenmez. İkinci davranış, bilgi penceresinin kapanıp yeniden açılacağının farkında olduğunuz varsayımına dayanır.
Bilgi pencereleriyle ilgili önceki bölümde belirtildiği gibi, bilgi penceresi canlı görüntüleme değildir. Bunun yerine, görünüm haritada resim olarak oluşturulur. Sonuç olarak, görünümde ayarladığınız işleyiciler göz ardı edilir ve görünümün çeşitli bölümlerindeki tıklama etkinliklerini birbirinden ayırt edemezsiniz. Özel bilgi pencerenize düğmeler, onay kutuları veya metin girişleri gibi etkileşimli bileşenler yerleştirmemeniz önerilir.