Bilgi Pencereleri

Platform seçin: Android iOS JavaScript

Bir bilgi penceresinde, haritanın üzerindeki bir pop-up pencerede metin veya resim görüntülenir. Bilgi pencereleri her zaman bir işaretçiye sabitlenir. Varsayılan davranışı, işaretçiye dokunulduğunda görüntülenmektir.

Kod örnekleri

GitHub'daki ApiDemos deposu, tüm bilgi penceresi özelliklerini gösteren bir örnek içerir:

Giriş

Bilgi penceresi, kullanıcılar bir işaretçiye dokunduğunda onlara bilgi görüntülemenizi sağlar. Aynı anda yalnızca bir bilgi penceresi gösterilir. Kullanıcı bir işaretçiyi tıklarsa mevcut bilgi penceresi kapatılır ve yeni bilgi penceresi görüntülenir. Kullanıcı, bilgi penceresi gösteren bir işaretçiyi tıklarsa bu bilgi penceresinin kapanıp yeniden açılacağını unutmayın.

Cihaz ekranına doğru, ilişkili işaretçisinin üzerinde ortalanmış bir bilgi penceresi gösterilir. Varsayılan bilgi penceresinde başlık kalın harflerle gösterilir. Başlığın altında (isteğe bağlı) snippet metni de bulunur.

Bilgi penceresi ekleme

Bilgi penceresi eklemenin en basit yolu, ilgili işaretçi için title() ve snippet() yöntemlerini ayarlamaktır. Bu özelliklerin ayarlanması, söz konusu işaretçi her tıklandığında bir bilgi penceresinin görünmesine neden olur.

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"));

      

Kotlin


val melbourneLatLng = LatLng(-37.81319, 144.96298)
val melbourne = map.addMarker(
    MarkerOptions()
        .position(melbourneLatLng)
        .title("Melbourne")
        .snippet("Population: 4,137,400")
)

      

Bilgi penceresini göster/gizle

Bilgi pencereleri, kullanıcı dokunma etkinliklerine yanıt verecek şekilde tasarlanmıştır. İsterseniz hedef işaretçide showInfoWindow() yöntemini çağırarak bir bilgi penceresini programatik olarak gösterebilirsiniz. hideInfoWindow() çağrısı yapılarak bir bilgi penceresi gizlenebilir.

Java


final LatLng melbourneLatLng = new LatLng(-37.81319, 144.96298);
Marker melbourne = map.addMarker(
    new MarkerOptions()
        .position(melbourneLatLng)
        .title("Melbourne"));
melbourne.showInfoWindow();

      

Kotlin


val melbourneLatLng = LatLng(-37.81319, 144.96298)
val melbourne = map.addMarker(
    MarkerOptions()
        .position(melbourneLatLng)
        .title("Melbourne")
)
melbourne?.showInfoWindow()

      

Ayrı ayrı kümelenmiş işaretçiler için bilgi pencereleri de oluşturabilirsiniz. Bağımsız kümelenmiş işaretçiler için bilgi penceresi ekleme ile ilgili kılavuzu okuyun.

Özel bilgi pencereleri

Ayrıca, bilgi pencerelerinin içeriğini ve tasarımını ö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() yöntemini çağırmanız gerekir. Arayüzde, uygulayabileceğiniz iki yöntem bulunur: getInfoWindow(Marker) ve getInfoContents(Marker). API ilk olarak getInfoWindow(Marker) yöntemini çağırır ve null döndürülürse getInfoContents(Marker) yöntemini çağırır. Bu da null değerini döndürürse varsayılan bilgi penceresi kullanılır.

Bunlardan ilki (getInfoWindow()), tüm bilgi penceresi için kullanılacak bir görünüm sağlamanıza olanak tanır. Bunlardan ikincisi (getInfoContents()), varsayılan bilgi pencere çerçevesi ve arka planı korurken yalnızca pencerenin içeriğini özelleştirmenize olanak tanır.

Aşağıdaki resimlerde bir varsayılan bilgi penceresi, özelleştirilmiş içeriklerin bulunduğu bilgi penceresi ve özelleştirilmiş çerçeve ile arka planın bulunduğu bir bilgi penceresi gösterilmektedir.

Bilgi Penceresi Karşılaştırması

Bilgi penceresi etkinlikleri

MarkerDemoActivity örneği, bilgi penceresi etkinliklerini kaydetmek ve işlemek için örnek kod içerir.

Bir bilgi penceresindeki tıklama etkinliklerini dinlemek için OnInfoWindowClickListener kullanabilirsiniz. Bu işleyiciyi 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 rengiyle (gri) vurgulanır.

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();
    }
}

      

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()
    }
}

      

Benzer şekilde, uzun tıklama etkinliklerini bir OnInfoWindowLongClickListener ile dinleyebilirsiniz. Bunu GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener) işlevini çağırarak ayarlayabilirsiniz. Bu işleyici, tıklama işleyiciye benzer şekilde davranır ve uzun tıklama etkinliklerinde onInfoWindowClose(Marker) geri çağırmasıyla bilgilendirilir.

Bilgi penceresi kapatıldığında bildirim almak için bir OnInfoWindowCloseListener kullanın. Bunu, GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener) yöntemini çağırarak ayarlayabilirsiniz. onInfoWindowClose(Marker) ile ilgili geri arama alacaksınız.

Bilgi penceresini yenileme hakkında not: Kullanıcı, açık bilgi penceresi bulunan bir işaretçiye dokunarak bilgi penceresini yenilerse onInfoWindowClose() etkinliği tetiklenir. Ancak açık bir bilgi penceresinde programlı olarak Marker.showInfoWindow() çağırırsanız onInfoWindowClose() etkinliği tetiklenmez. İkinci davranış, bilgi penceresinin kapanacağını ve yeniden açılacağını bildiğiniz varsayımına dayanır.

Bilgi pencereleriyle ilgili bir önceki bölümde belirtildiği gibi, bilgi penceresi canlı görüntüleme değildir. Bunun yerine, görünüm harita üzerinde bir resim olarak oluşturulur. Sonuç olarak, görünümde ayarladığınız işleyiciler dikkate alınmaz ve görünümün çeşitli bölümlerindeki tıklama etkinliklerini ayırt edemezsiniz. Düğmeler, onay kutuları veya metin girişleri gibi etkileşimli bileşenleri özel bilgi pencerenize yerleştirmemeniz önerilir.