หน้าต่างข้อมูลจะแสดงข้อความหรือรูปภาพในหน้าต่างป๊อปอัปเหนือแผนที่ หน้าต่างข้อมูลจะยึดอยู่กับเครื่องหมายเสมอ ลักษณะการทำงานเริ่มต้นคือ เพื่อแสดงเมื่อมีการแตะเครื่องหมาย
ตัวอย่างโค้ด
ที่เก็บ ApiDemos บน GitHub ประกอบด้วย ตัวอย่างที่แสดงให้เห็นถึงฟีเจอร์หน้าต่างข้อมูลทั้งหมด
- MarkerDemoActivity - Java: การปรับแต่งหน้าต่างข้อมูลและการใช้ Listener ของหน้าต่างข้อมูล
- MarkerDemoActivity - Kotlin: การปรับแต่งหน้าต่างข้อมูลและ โดยใช้ Listener หน้าต่างข้อมูล
บทนำ
หน้าต่างข้อมูลจะช่วยให้คุณแสดงข้อมูลให้กับผู้ใช้เมื่อผู้ใช้แตะ เครื่องหมาย ระบบจะแสดงหน้าต่างข้อมูลเพียงครั้งละ 1 รายการเท่านั้น หากผู้ใช้คลิกเครื่องหมาย หน้าต่างข้อมูลปัจจุบันจะปิดลงและหน้าต่างข้อมูลใหม่จะปรากฏขึ้น โปรดทราบว่าหากผู้ใช้คลิกเครื่องหมายที่แสดงหน้าต่างข้อมูลอยู่ หน้าต่างข้อมูลดังกล่าวจะปิดและเปิดขึ้นอีกครั้ง
แสดงหน้าต่างข้อมูลโดยหันไปตามหน้าจอของอุปกรณ์ตรงกลาง เหนือเครื่องหมายที่เชื่อมโยงอยู่ หน้าต่างข้อมูลเริ่มต้นจะมีชื่อ เป็นตัวหนาพร้อมข้อความข้อมูลเพิ่มเติม (ไม่บังคับ) ด้านล่างหัวข้อ
เพิ่มหน้าต่างข้อมูล
วิธีที่ง่ายที่สุดในการเพิ่มหน้าต่างข้อมูลคือการตั้งค่าtitle()
และsnippet()
ของเครื่องหมายที่เกี่ยวข้อง การตั้งค่าคุณสมบัติเหล่านี้จะทําให้
เพื่อให้ปรากฏเมื่อใดก็ตามที่มีการคลิกเครื่องหมายนั้น
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"));
แสดง/ซ่อนหน้าต่างข้อมูล
หน้าต่างข้อมูลออกแบบมาเพื่อตอบสนองต่อกิจกรรมการสัมผัสของผู้ใช้ หากต้องการ คุณสามารถ
สามารถแสดงหน้าต่างข้อมูลแบบเป็นโปรแกรมได้โดยการเรียกใช้
showInfoWindow()
บนเครื่องหมายเป้าหมาย คุณซ่อนหน้าต่างข้อมูลได้โดยเรียกใช้ hideInfoWindow()
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();
นอกจากนี้ คุณยังสร้างหน้าต่างข้อมูลสำหรับเครื่องหมายที่จัดกลุ่มแต่ละรายการได้ด้วย อ่านคำแนะนำเกี่ยวกับการเพิ่มหน้าต่างข้อมูลสำหรับเครื่องหมายที่จัดกลุ่มแต่ละรายการ
หน้าต่างข้อมูลที่กำหนดเอง
คุณยังสามารถปรับแต่งเนื้อหาและการออกแบบหน้าต่างข้อมูลได้อีกด้วย โดยคุณต้องสร้างการใช้งานที่เป็นรูปธรรมของอินเทอร์เฟซ InfoWindowAdapter
แล้วเรียกใช้ GoogleMap.setInfoWindowAdapter()
กับการใช้งาน อินเทอร์เฟซมี 2 วิธีในการใช้งาน ได้แก่
getInfoWindow(Marker)
และ getInfoContents(Marker)
API จะเรียก getInfoWindow(Marker)
ก่อน หากระบบแสดงผล null
ก็จะเรียก getInfoContents(Marker)
หากผลลัพธ์คือ null
ระบบจะใช้กรอบข้อมูลเริ่มต้น
รายการแรก (getInfoWindow()
) ช่วยให้คุณแสดงมุมมองที่
จะใช้สำหรับหน้าต่างข้อมูลทั้งหมด รายการที่ 2
(getInfoContents()
) ช่วยให้คุณปรับแต่งเนื้อหาของหน้าต่างได้
แต่ยังคงใช้กรอบและพื้นหลังหน้าต่างข้อมูลเริ่มต้นไว้
รูปภาพด้านล่างแสดงหน้าต่างข้อมูลเริ่มต้น หน้าต่างข้อมูลที่มีเนื้อหาที่กําหนดเอง และหน้าต่างข้อมูลที่มีกรอบและพื้นหลังที่กําหนดเอง
เหตุการณ์เกี่ยวกับหน้าต่างข้อมูล
ตัวอย่าง MarkerDemoActivity มีโค้ดตัวอย่างสำหรับ การลงทะเบียนและจัดการเหตุการณ์ของหน้าต่างข้อมูล
คุณสามารถใช้ OnInfoWindowClickListener
เพื่อ
ฟังเหตุการณ์การคลิกบนหน้าต่างข้อมูล โดยวิธีตั้งค่า Listener นี้บนแผนที่
โทรหา GoogleMap.setOnInfoWindowClickListener(OnInfoWindowClickListener)
วันและเวลา
ผู้ใช้คลิกหน้าต่างข้อมูล จะมีการเรียก onInfoWindowClick(Marker)
และหน้าต่างข้อมูลจะไฮไลต์ด้วยสีไฮไลต์เริ่มต้น (สีเทา)
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(); } }
ในทำนองเดียวกัน คุณสามารถติดตามกิจกรรมการคลิกนานด้วย
OnInfoWindowLongClickListener
ซึ่งคุณ
ตั้งค่าได้โดยการโทร
GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener)
Listener นี้ทำงานคล้ายกับ Listener การคลิก และจะได้รับการแจ้งเตือนใน
เหตุการณ์การคลิกแบบยาวที่มี Callback onInfoWindowClose(Marker)
หากต้องการรับการแจ้งเตือนเมื่อหน้าต่างข้อมูลปิดลง ให้ใช้
OnInfoWindowCloseListener
ซึ่งคุณสามารถ
ตั้งค่าโดยการโทร
GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener)
คุณจะได้รับonInfoWindowClose(Marker)
โทรกลับ
หมายเหตุเกี่ยวกับการรีเฟรชหน้าต่างข้อมูล: เหตุการณ์ onInfoWindowClose()
จะเริ่มทำงานหาก
ผู้ใช้รีเฟรชหน้าต่างข้อมูลโดยแตะเครื่องหมายที่มีช่องเปิดอยู่แล้ว
หน้าต่างข้อมูล แต่ถ้าคุณเรียก Marker.showInfoWindow()
แบบเป็นโปรแกรมใน
เปิดหน้าต่างข้อมูล เหตุการณ์ onInfoWindowClose()
ไม่เริ่มทำงาน รายการหลัง
จะอ้างอิงจากสมมติฐานที่คุณทราบว่าหน้าต่างข้อมูลจะ
ปิดแล้วเปิดใหม่
ดังที่กล่าวไว้ในส่วนก่อนหน้าเกี่ยวกับหน้าต่างข้อมูล หน้าต่างข้อมูลไม่ใช่ Live View แต่มุมมองจะแสดงผลเป็นรูปภาพบนแผนที่ เพื่อ ดังนั้นระบบจะไม่สนใจ Listener ที่คุณตั้งค่าไว้ในมุมมอง แยกความแตกต่างระหว่างกิจกรรมการคลิกในส่วนต่างๆ ของมุมมอง คุณได้รับคำแนะนำ อย่าวางคอมโพเนนต์แบบอินเทอร์แอกทีฟ เช่น ปุ่ม ช่องทำเครื่องหมาย หรือข้อความ ด้วยตนเอง ภายในหน้าต่างข้อมูลที่กำหนดเอง