เลือกแพลตฟอร์ม: Android iOS JavaScript

คอมโพเนนต์รายละเอียดสถานที่

คอมโพเนนต์รายละเอียดสถานที่ของ Places UI Kit ช่วยให้คุณเพิ่มคอมโพเนนต์ UI แต่ละรายการที่แสดงรายละเอียดสถานที่ในแอปได้ คอมโพเนนต์นี้ปรับแต่งได้

คอมโพเนนต์รายละเอียดสถานที่แบบกะทัดรัด

คุณใช้คอมโพเนนต์รายละเอียดสถานที่ได้โดยอิสระหรือใช้ร่วมกับ API และบริการอื่นๆ ของ Google Maps Platform คอมโพเนนต์จะใช้รหัสสถานที่ ชื่อทรัพยากร หรือพิกัดละติจูด/ลองจิจูด และแสดงข้อมูลรายละเอียดสถานที่ที่แสดงผล

คอมโพเนนต์รายละเอียดสถานที่สามารถปรับแต่งธีมได้อย่างเต็มที่ ซึ่งช่วยให้คุณปรับแต่งแบบอักษร สี และรัศมีมุมให้ตรงกับกรณีการใช้งานและหลักเกณฑ์การสร้างแบรนด์ด้วยภาพได้ คุณปรับแต่งลักษณะที่รายละเอียดสถานที่ปรากฏได้โดยระบุค่า PlacesMaterialTheme ที่กำหนดเอง นอกจากนี้ คุณยังปรับแต่งช่องรายละเอียดสถานที่ที่จะรวมได้โดยระบุรายการของรายการ PlaceDetailsCompactView ซึ่งแต่ละรายการจะสอดคล้องกับข้อมูลที่แสดงเกี่ยวกับสถานที่

รูปแบบเลย์เอาต์

คอมโพเนนต์รายละเอียดสถานที่รองรับเลย์เอาต์หลัก 2 รูปแบบ ได้แก่

  • กะทัดรัด: เลย์เอาต์สำหรับแสดงตัวอย่างข้อมูลสำคัญ
  • แบบเต็ม: เลย์เอาต์ที่ครอบคลุมซึ่งแสดงรายละเอียดสถานที่ทั้งหมดที่พร้อมใช้งาน

เลย์เอาต์แบบกะทัดรัดจะแสดงในแนวตั้งหรือแนวนอนก็ได้ ซึ่งช่วยให้คุณผสานรวมคอมโพเนนต์เข้ากับเลย์เอาต์การออกแบบและขนาดหน้าจอต่างๆ ได้ เลย์เอาต์แบบเต็มจะแสดงได้ในแนวตั้งเท่านั้น

เลย์เอาต์แนวนอนและแนวตั้ง
เลย์เอาต์แนวนอนและแนวตั้ง

คอมโพเนนต์รายละเอียดสถานที่ช่วยให้คุณควบคุมเนื้อหาที่แสดงในคอมโพเนนต์ได้อย่างละเอียด คุณจะแสดงหรือซ่อนแต่ละองค์ประกอบ (เช่น รูปภาพ รีวิว และข้อมูลติดต่อ) แยกกันได้ ซึ่งช่วยให้ปรับแต่งลักษณะที่ปรากฏของคอมโพเนนต์และความหนาแน่นของข้อมูลได้อย่างแม่นยำ

ตัวเลือกเนื้อหารายละเอียดสถานที่
ตัวเลือกการแสดงเนื้อหา

มุมมองแบบกะทัดรัดของรายละเอียดสถานที่

มุมมองแบบกะทัดรัดของรายละเอียดสถานที่ (PlaceDetailsCompactView) จะแสดงรายละเอียดของสถานที่ที่เลือกโดยใช้พื้นที่น้อยที่สุด ซึ่งอาจมีประโยชน์ในหน้าต่างข้อมูลที่ไฮไลต์สถานที่ในแผนที่ ในประสบการณ์การใช้งานโซเชียลมีเดีย เช่น การแชร์ตำแหน่งในแชท เป็นคำแนะนำในการเลือกตำแหน่งปัจจุบัน หรือภายในบทความสื่อเพื่ออ้างอิงสถานที่ใน Google Maps

มุมมองแบบเต็มของรายละเอียดสถานที่

มุมมองแบบเต็มของรายละเอียดสถานที่ (PlaceDetailsView) มีพื้นที่ขนาดใหญ่ขึ้นเพื่อแสดงข้อมูลรายละเอียดสถานที่ และช่วยให้คุณแสดงข้อมูลได้หลายประเภทมากขึ้น

ตัวเลือกการแสดงเนื้อหา

คุณระบุเนื้อหาที่จะแสดงได้โดยใช้ Enum ใน PlaceDetailsCompactContent หรือ PlaceDetailsContent

มุมมองแบบกะทัดรัด มุมมองเต็ม
  • รูปภาพสถานที่
  • ที่อยู่ของสถานที่
  • คะแนนและจำนวนการให้คะแนน
  • ประเภทสถานที่
  • ราคา
  • ข้อมูลทางเข้าที่รองรับเก้าอี้รถเข็น
  • สถานะเปิดอยู่
  • ภาพคอลลาจของสถานที่
  • ที่อยู่ของสถานที่
  • คะแนนและจำนวนการให้คะแนน
  • ประเภทสถานที่
  • ราคา
  • ข้อมูลเกี่ยวกับการช่วยเหลือพิเศษ
  • สถานะเปิดอยู่
  • เวลาเปิดทำการ
  • บทบรรณาธิการสรุป
  • เว็บไซต์
  • หมายเลขโทรศัพท์
  • รีวิวที่แสดงในแท็บเฉพาะ
  • Plus Code
  • รายการฟีเจอร์ที่แสดงในแท็บเฉพาะ
  • ไฮไลต์เฉพาะประเภท เช่น ราคาน้ำมันสำหรับปั๊มน้ำมัน

การเรียกเก็บเงิน

เมื่อใช้ Place Details UI Kit ระบบจะเรียกเก็บเงินทุกครั้งที่มีการเรียกใช้เมธอด PlaceDetailsQuery หากโหลดสถานที่เดียวกันหลายครั้ง ระบบจะเรียกเก็บเงินสำหรับการขอแต่ละครั้ง

เพิ่มรายละเอียดสถานที่ลงในแอป

คอมโพเนนต์รายละเอียดสถานที่คือ Swift UI View คุณปรับแต่งรูปลักษณ์ของข้อมูลรายละเอียดสถานที่ให้เหมาะกับความต้องการและรูปลักษณ์ของแอปได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับการปรับแต่ง

คุณเลือกโหลดคอมโพเนนต์รายละเอียดสถานที่ด้วยรหัสสถานที่ ชื่อทรัพยากร หรือพิกัดละติจูด/ลองจิจูดได้ คุณเลือกวิธีใดก็ได้หรือจะเลือกหลายวิธีก็ได้ ตั้งค่า identifier ในโครงสร้าง PlaceDetailsQuery เป็น .placeID, .resourceName หรือ .coordinate

ตําแหน่งเริ่มต้นสําหรับมุมมองแบบกะทัดรัดคือแนวตั้ง หากต้องการเลย์เอาต์แนวนอน ให้ระบุ orientation: .horizontal ใน PlaceDetailsCompactView นอกจากนี้ คุณยังระบุ orientation: .vertical เพื่อให้ชัดเจนได้ด้วย โดยจะแสดงมุมมองแบบเต็มได้ในแนวตั้งเท่านั้น

ดูตัวอย่างได้ในส่วนตัวอย่างคอมโพเนนต์รายละเอียดสถานที่

ปรับแต่งลักษณะที่ปรากฏ

การปรับแต่งภาพรายละเอียดสถานที่
ตัวอย่างการปรับแต่งภาพ

ชุดเครื่องมือ UI ของ Places มีแนวทางระบบการออกแบบสำหรับการปรับแต่งภาพโดยอิงตาม Material Design โดยประมาณ (มีการแก้ไขบางอย่างที่เฉพาะเจาะจงสำหรับ Google Maps) ดูข้อมูลอ้างอิงของ Material Design สำหรับสีและการพิมพ์ โดยค่าเริ่มต้น สไตล์จะเป็นไปตามภาษาการออกแบบภาพของ Google Maps

ตัวเลือกการปรับแต่งรายละเอียดสถานที่

รูปลักษณ์ของคอมโพเนนต์ได้รับการปรับแต่งด้วยโครงสร้าง placesMaterialColor, placesMaterialFont, placesMaterialShape และ placesMaterialTheme

คุณปรับแต่งสไตล์ต่อไปนี้ได้

การปรับแต่งสีและตัวอักษรของกล่องโต้ตอบ
การปรับแต่งสีและตัวอักษรของกล่องโต้ตอบ
แอตทริบิวต์ธีม การใช้งาน
สี
theme.color.surface พื้นหลังของคอนเทนเนอร์และกล่องโต้ตอบ
theme.color.outlineDecorative เส้นขอบคอนเทนเนอร์
theme.color.primary ลิงก์ สัญญาณบอกสถานะการโหลด ไอคอนภาพรวม
theme.color.onSurface ส่วนหัว เนื้อหาของกล่องโต้ตอบ
theme.color.onSurfaceVariant ข้อมูลสถานที่
theme.color.secondaryContainer พื้นหลังของปุ่ม
theme.color.onSecondaryContainer ข้อความและไอคอนของปุ่ม
theme.color.neutralContainer ป้ายวันที่รีวิว รูปร่างตัวยึดตำแหน่งการโหลด
theme.color.onNeutralContainer วันที่ตรวจสอบ ข้อผิดพลาดในการโหลด
theme.color.positiveContainer ป้ายที่ชาร์จ EV ที่พร้อมให้บริการ
theme.color.onPositiveContainer เนื้อหาป้ายที่ชาร์จ EV ที่พร้อมใช้งาน
theme.color.positive ป้ายกำกับ "เปิด" ของสถานที่
theme.color.negative ป้ายกำกับ "ปิด" ของสถานที่
theme.color.info ไอคอนทางเข้าที่รองรับเก้าอี้รถเข็น
theme.measurement.borderWidthButton ปุ่มเปิดใน Maps และปุ่มตกลง
   
การออกแบบตัวอักษร
theme.font.bodySmall ข้อมูลสถานที่
theme.font.bodyMedium ข้อมูลสถานที่ เนื้อหาของกล่องโต้ตอบ
theme.font.labelMedium เนื้อหาป้าย
theme.font.labelLarge เนื้อหาปุ่ม
theme.font.headlineMedium ส่วนหัวของกล่องโต้ตอบ
theme.font.displaySmall ชื่อสถานที่
theme.font.titleSmall ชื่อสถานที่
   
การเว้นวรรค
theme.measurement.spacingExtraSmall
theme.measurement.spacingSmall
theme.measurement.spacingMedium
theme.measurement.spacinglarge
theme.measurement.spacingExtraLarge
theme.measurement.spacingTwoExtraLarge
   
การวัดผล
borderWidth คอนเทนเนอร์
theme.measurement.borderWidthButton
   
รูปร่าง
theme.shape.cornerRadius คอนเทนเนอร์
theme.shape.cornerRadiusButton ปุ่มเปิดใน Maps และปุ่มตกลง (ไม่รวมปุ่มไอคอนกลม)
theme.shape.cornerRadiusThumbnail รูปภาพขนาดย่อของสถานที่
theme.shape.cornerRadiusCollageOuter ภาพคอลลาจ
theme.shape.cornerRadiusCard การ์ดสถานที่ การ์ดรีวิวจากผู้ใช้
theme.shape.cornerRadiusDialog กล่องโต้ตอบการเปิดเผยข้อมูลของ Google Maps
   
การระบุแหล่งที่มาของแบรนด์ Google Maps
attribution.lightModeColor ปุ่มการระบุแหล่งที่มาและการเปิดเผยข้อมูลของ Google Maps ในธีมสว่าง (การแจงนับสำหรับสีขาว สีเทา และสีดำ)
attribution.darkModeColor ปุ่มการระบุแหล่งที่มาและการเปิดเผยข้อมูลของ Google Maps ในธีมมืด (การแจงนับสำหรับสีขาว สีเทา และสีดำ)

ดูตัวอย่างได้ในส่วนตัวอย่างคอมโพเนนต์รายละเอียดสถานที่

การปรับแต่งความกว้างและความสูง

มุมมองแบบกะทัดรัด

ความกว้างที่แนะนำ

  • การวางแนวตั้ง: ระหว่าง 180 พิกเซลถึง 300 พิกเซล
  • แนวนอน: ระหว่าง 180 ถึง 500 พิกเซล

แนวทางปฏิบัติแนะนำคือไม่ควรกำหนดความสูงสำหรับมุมมองแบบกะทัดรัด ซึ่งจะช่วยให้เนื้อหาในหน้าต่างกำหนดความสูงได้ ทำให้แสดงข้อมูลทั้งหมดได้

ความกว้างที่เล็กกว่า 160 พิกเซลอาจแสดงผลไม่ถูกต้อง

มุมมองแบบเต็ม

สำหรับมุมมองแบบเต็ม ความกว้างที่แนะนำคือระหว่าง 250 พิกเซลถึง 450 พิกเซล ความกว้างที่เล็กกว่า 250 พิกเซลอาจแสดงผลไม่ถูกต้อง

คุณกำหนดความสูงของคอมโพเนนต์ได้ โดยมุมมองรายละเอียดสถานที่แนวตั้งจะเลื่อนในแนวตั้งภายในพื้นที่ที่จัดสรรไว้

แนวทางปฏิบัติแนะนำคือการตั้งค่าความสูงสำหรับการดูแบบเต็ม ซึ่งจะช่วยให้เนื้อหาในหน้าต่างเลื่อนได้อย่างถูกต้อง

สีการระบุแหล่งที่มา

การระบุแหล่งที่มา
การระบุแหล่งที่มา

ข้อกำหนดในการให้บริการของ Google Maps กำหนดให้คุณต้องใช้สีแบรนด์สีใดสีหนึ่งจาก 3 สีสำหรับการระบุแหล่งที่มาของ Google Maps การระบุแหล่งที่มานี้ต้องมองเห็นได้และเข้าถึงได้เมื่อมีการเปลี่ยนแปลงการปรับแต่ง

เรามีสีแบรนด์ 3 สีให้เลือก ซึ่งตั้งค่าแยกกันสำหรับธีมสว่างและธีมมืดได้

  • ธีมสว่าง: attributionColorLight พร้อมด้วยการแจงนับสำหรับสีขาว เทา และดำ
  • ธีมมืด: attributionColorDark พร้อมการแจงนับสำหรับสีขาว เทา และดำ

ตัวอย่างคอมโพเนนต์รายละเอียดสถานที่

สร้างมุมมองแบบเต็มด้วยเลย์เอาต์แนวตั้ง

Swift

  var selectedType: Set<PlaceDetailsCompactContent> = PlaceDetailsCompactView.standardContent

    // Query for loading the place details widget.
    @State var query: PlaceDetailsQuery = PlaceDetailsQuery(
      identifier: .placeID("ChIJT7FdmYiAhYAROFOvrIxRJDU"))
    
    var theme: PlacesMaterialTheme = PlacesMaterialTheme()
    var configuration: PlaceDetailsConfiguration {
      PlaceDetailsConfiguration(
        content: selectedType,
        theme: theme)
    }
    
    // Callback for the place details widget.
    let placeDetailsCallback: (PlaceDetailsResult) -> Void = { result in
      if let place = result.place {
        print("Place: \(place.description)")
      } else {
        print("Error: \(String(describing: result.error))")
      }
    }
    PlaceDetailsCompactView(
      orientation: .vertical, query: $query,
      configuration: configuration,
      placeDetailsCallback: placeDetailsCallback
    )

สร้างมุมมองแบบกะทัดรัดด้วยเลย์เอาต์แนวนอน

Swift

  var selectedType: Set<PlaceDetailsCompactContent> = PlaceDetailsCompactView.standardContent

    // Query for loading the place details widget.
    @State var query: PlaceDetailsQuery = PlaceDetailsQuery(
      identifier: .placeID("ChIJT7FdmYiAhYAROFOvrIxRJDU"))
    
    var theme: PlacesMaterialTheme = PlacesMaterialTheme()
    var configuration: PlaceDetailsConfiguration {
      PlaceDetailsConfiguration(
        content: selectedType,
        theme: theme)
    }
    
    // Callback for the place details widget.
    let placeDetailsCallback: (PlaceDetailsResult) -> Void = { result in
      if let place = result.place {
        print("Place: \(place.description)")
      } else {
        print("Error: \(String(describing: result.error))")
      }
    }
    PlaceDetailsCompactView(
      orientation: .horizontal, query: $query,
      configuration: configuration,
      placeDetailsCallback: placeDetailsCallback
    )

สร้างมุมมองแบบเต็มด้วยเลย์เอาต์แนวตั้ง

Swift

  @State var query: PlaceDetailsQuery = PlaceDetailsQuery(
    identifier: .placeID("ChIJT7FdmYiAhYAROFOvrIxRJDU"))
  var theme: PlacesMaterialTheme = PlacesMaterialTheme()
  var selectedType: Set<PlaceDetailsContent> = PlaceDetailsCompactView.standardContent
  
  var configuration: PlaceDetailsConfiguration {
    PlaceDetailsConfiguration(
      content: selectedType,
      theme: theme)
  }
  let placeDetailsCallback: (PlaceDetailsResult) -> Void = { result in
    placeIDPickerFocused = true
    if let place = result.place {
      print("Place: \(place.description)")
    } else {
      print("Error: \(String(describing: result.error))")
    }
  }
  GooglePlacesSwift.PlaceDetailsView(
    query: $query,
    configuration: configuration,
    placeDetailsCallback: placeDetailsCallback
  )

ปรับแต่งแอตทริบิวต์รูปแบบ

ตัวอย่างนี้แสดงวิธีปรับแต่งแอตทริบิวต์รูปแบบเริ่มต้นของมุมมองแบบเต็มหรือแบบกะทัดรัด

Swift

  // Same for compact and full
func makeTemplateTheme(colorScheme: ColorScheme) -> PlacesMaterialTheme {
  var theme = PlacesMaterialTheme()
  var color = PlacesMaterialColor()
  color.surface = (colorScheme == .dark ? .blue : .gray)
  color.buttonBorder = (colorScheme == .dark ? .pink : .orange)
  color.outlineDecorative = (colorScheme == .dark ? .white : .black)
  color.onSurface = (colorScheme == .dark ? .yellow : .red)
  color.onSurfaceVariant = (colorScheme == .dark ? .white : .blue)
  color.onSecondaryContainer = (colorScheme == .dark ? .white : .red)
  color.secondaryContainer = (colorScheme == .dark ? .green : .purple)
  color.positive = (colorScheme == .dark ? .yellow : .red)
  color.primary = (colorScheme == .dark ? .yellow : .purple)
  color.info = (colorScheme == .dark ? .yellow : .purple)
  var shape = PlacesMaterialShape()
  shape.cornerRadius = 10
  var font = PlacesMaterialFont()
  font.labelLarge = .system(size: UIFontMetrics.default.scaledValue(for: 18))
  font.headlineMedium = .system(size: UIFontMetrics.default.scaledValue(for: 15))
  font.bodyLarge = .system(size: UIFontMetrics.default.scaledValue(for: 15))
  font.bodyMedium = .system(size: UIFontMetrics.default.scaledValue(for: 12))
  font.bodySmall = .system(size: UIFontMetrics.default.scaledValue(for: 11))
  var attribution = PlacesMaterialAttribution()
  attribution.lightModeColor = .black
  attribution.darkModeColor = .white
  theme.measurement.borderWidthButton = 1
  theme.color = color
  theme.shape = shape
  theme.font = font
  theme.attribution = attribution
  return theme
}

แสดงเนื้อหาที่เฉพาะเจาะจง

ตัวอย่างนี้สร้างมุมมองแบบกะทัดรัดที่แสดงเฉพาะสื่อ ที่อยู่ การให้คะแนน และประเภท โดยใช้ธีมที่สร้างในตัวอย่างก่อนหน้า

Swift

  @State var query: PlaceDetailsQuery = PlaceDetailsQuery(
    identifier: .placeID("ChIJT7FdmYiAhYAROFOvrIxRJDU"))
  
  var body: some View {
    PlaceDetailsCompactView(
      orientation: .vertical, query: $query,
      contentType: [.media(), .address(), .rating(),
                    .type(), .price()], theme: theme,
      placeDetailsCallback: placeDetailsCallback, preferTruncation: false
    )
    .frame(width: 350)
  }