資訊視窗會在地圖上方的彈出式視窗中顯示文字或影像。 資訊視窗一律錨定到標記。 預設行為是輕按標記時隨即顯示。
簡介
資訊視窗能讓您在使用者點選標記時,向使用者顯示資訊。 一次只能顯示一個資訊視窗。 如果使用者點擊另一個標記,將會隱藏目前的資訊視窗,並顯示新的資訊視窗。
資訊視窗是朝著裝置螢幕方向繪製,並置中於關聯的標記上方。 預設的資訊視窗會包含粗體標題,而標題下方會有 (選擇性) 片段文字。
新增資訊視窗
新增資訊視窗最簡單的方法是,設定對應標記的
title()
與 snippet()
方法。 設定這些屬性,會讓資訊視窗每次只要點擊標記就會出現。static final LatLng MELBOURNE = new LatLng(-37.81319, 144.96298);
Marker melbourne = mMap.addMarker(new MarkerOptions()
.position(MELBOURNE)
.title("Melbourne")
.snippet("Population: 4,137,400"));
顯示/隱藏資訊視窗
資訊視窗是為了回應使用者輕觸事件而設計。 您可以選擇透過呼叫目標標記上的
showInfoWindow()
,以程式設計方式顯示資訊視窗。呼叫 hideInfoWindow()
可以隱藏資訊視窗。static final LatLng MELBOURNE = new LatLng(-37.81319, 144.96298);
Marker melbourne = mMap.addMarker(new MarkerOptions()
.position(MELBOURNE)
.title("Melbourne"));
melbourne.showInfoWindow();
自訂資訊視窗
您也可以自訂資訊視窗的內容與設計。 如果要這樣做,您必須建立
InfoWindowAdapter
介面的具體實作,然後透過實作呼叫 GoogleMap.setInfoWindowAdapter()
。介面包含兩種實作方法:getInfoWindow(Marker)
與 getInfoContents(Marker)
。 API 會先呼叫 getInfoWindow(Marker)
,如果傳回 null
,會接著呼叫 getInfoContents(Marker)
。如果同樣傳回 null
,就會使用預設資訊視窗。
前述的第一項 (
getInfoWindow()
) 可讓您提供要用於整個資訊視窗的檢視。 前述的第二項 (getInfoContents()
) 可讓您僅自訂視窗內容,但保留預設資訊視窗框架與背景。
注意:繪製的資訊視窗「並非」即時檢視。 檢視傳回時會轉譯為影像 (使用
View.draw(Canvas)
)。
這表示地圖上的資訊視窗不會反映出後續對檢視的所做變更。 如果要在稍後更新資訊視窗 (例如,完成載入影像後),請呼叫
showInfoWindow()
。 因此,資訊視窗不會有一般檢視常見的任何互動,例如,輕觸或手勢事件。然而,您可以接聽整個資訊視窗上的一般點擊事件,如下一節節中所述。
以下影像分別顯示預設資訊視窗、含有自訂內容的資訊視窗,以及含有自訂框架與背景的資訊視窗。
資訊視窗事件
您可以使用
OnInfoWindowClickListener
來接聽資訊視窗上的點擊事件。 如果要在地圖上設定此接聽程式,請呼叫 GoogleMap.setOnInfoWindowClickListener(OnInfoWindowClickListener)
。 當使用者按一下資訊視窗時,會呼叫 onInfoWindowClick(Marker)
,然後會以預設的醒目色彩 (執行 Ice Cream Sandwich 與更新版本的裝置為 Hollo 藍色,舊版 Android 為橘色) 醒目顯示資訊視窗。
如上一節所述,資訊視窗並非即時
View
,而是地圖上轉譯為影像的檢視。 因此會捨棄您在檢視上設定的任何接聽程式,您也無法辨別檢視各部分的點擊事件。建議您不要在自訂資訊視窗內放置互動式元件,例如按鈕、核取方塊或文字輸入
沒有留言:
張貼留言