Plattform auswählen: Android iOS JavaScript

„Place Details“-Komponente

Mit der Komponente „Place Details“ des Places UI Kits können Sie eine einzelne UI-Komponente hinzufügen, in der Ortsdetails in Ihrer App angezeigt werden. Diese Komponente ist anpassbar.

Kompakte Komponente „Ortsdetails“

Die Komponente „Ortsdetails“ kann unabhängig oder in Verbindung mit anderen APIs und Diensten der Google Maps Platform verwendet werden. Die Komponente akzeptiert entweder eine Orts-ID, einen Ressourcennamen oder Breiten-/Längenkoordinaten und gibt gerenderte Ortsdetails zurück.

Die Komponente „Ortsdetails“ ist vollständig thematisierbar. Sie können Schriftarten, Farben und Eckenradien an Ihren Anwendungsfall und Ihre visuellen Markenrichtlinien anpassen. Sie können die Darstellung der Ortsdetails anpassen, indem Sie benutzerdefinierte PlacesMaterialTheme-Werte angeben. Sie können auch anpassen, welche Felder mit Ortsdetails enthalten sind, indem Sie eine Liste mit PlaceDetailsCompactView-Einträgen angeben, die jeweils einem Teil der Informationen entsprechen, die zum Ort angezeigt werden.

Layoutvarianten

Die Komponente „Ortsdetails“ unterstützt zwei Hauptlayoutvarianten:

  • Kompakt:Ein Layout für die Vorschau wichtiger Informationen.
  • Vollständig:Ein umfassendes Layout mit allen verfügbaren Ortsdetails.

Das kompakte Layout kann entweder vertikal oder horizontal angezeigt werden. So können Sie die Komponente in verschiedene Designlayouts und Bildschirmgrößen einfügen. Das vollständige Layout kann nur vertikal angezeigt werden.

horizontale und vertikale Layouts
Horizontale und vertikale Layouts

Mit der Komponente „Ortsdetails“ haben Sie detaillierte Kontrolle über die in der Komponente angezeigten Inhalte. Jedes Element (z. B. Fotos, Rezensionen und Kontaktdaten) kann einzeln ein- oder ausgeblendet werden. So lässt sich das Erscheinungsbild der Komponenten und die Informationsdichte präzise anpassen.

Inhaltsoptionen für Ortsdetails
Optionen für die Inhaltsanzeige

Kompaktansicht für Ortsdetails

In der kompakten Ansicht von „Place Details“ (PlaceDetailsCompactView) werden Details für einen ausgewählten Ort auf minimalem Raum gerendert. Das kann in einem Infofenster nützlich sein, in dem ein Ort auf einer Karte hervorgehoben wird, in einem sozialen Medium wie beim Teilen eines Standorts in einem Chat, als Vorschlag für die Auswahl Ihres aktuellen Standorts oder in einem Medienartikel, um auf den Ort in Google Maps zu verweisen.

Vollständige Ansicht von Ortsdetails

Die vollständige Ansicht von Ortsdetails (PlaceDetailsView) bietet eine größere Fläche für die Anzeige von Ortsdetails und ermöglicht es Ihnen, mehr Arten von Informationen zu präsentieren.

Optionen für die Inhaltsanzeige

Mit den Enums in PlaceDetailsCompactContent oder PlaceDetailsContent können Sie angeben, welche Inhalte angezeigt werden sollen.

Kompaktansicht Vollansicht
  • Foto zum Ort
  • Adresse des Orts
  • Bewertung und Anzahl der Bewertungen
  • Ortstyp
  • Preis
  • Informationen zum barrierefreien Eingang
  • Status „Jetzt geöffnet“
  • Fotocollage zum Ort
  • Adresse des Orts
  • Bewertung und Anzahl der Bewertungen
  • Ortstyp
  • Preis
  • Informationen zur Barrierefreiheit
  • Status „Jetzt geöffnet“
  • Öffnungszeiten
  • Redaktionelle Zusammenfassung
  • Website
  • Telefonnummer
  • Rezensionen auf einem separaten Tab
  • Plus Code
  • Funktionsliste auf einem separaten Tab
  • Typspezifische Highlights, z. B. Benzinpreise für Tankstellen

Abrechnung

Wenn Sie das Place Details UI Kit verwenden, wird Ihnen jeder Aufruf der Methode PlaceDetailsQuery in Rechnung gestellt. Wenn Sie denselben Ort mehrmals laden, wird Ihnen jede Anfrage in Rechnung gestellt.

Ortsdetails in Ihre App einfügen

Die Komponente „Place Details“ ist eine Swift-UI-Ansicht. Sie können das Erscheinungsbild der Ortsdetails an Ihre Anforderungen und das Design Ihrer App anpassen. Weitere Informationen

Sie können die Komponente „Ortsdetails“ mit einer Place ID, einem Ressourcennamen oder Breiten-/Längengradkoordinaten laden. Sie können eine oder mehrere Methoden auswählen. Legen Sie identifier im PlaceDetailsQuery-Struct auf .placeID, .resourceName oder .coordinate fest.

Die Standardposition für die kompakte Ansicht ist vertikal. Wenn Sie ein horizontales Layout wünschen, geben Sie orientation: .horizontal in PlaceDetailsCompactView an. Optional können Sie auch orientation: .vertical angeben, um die Lesbarkeit zu verbessern. Die Vollansicht kann nur vertikal angezeigt werden.

Beispiele finden Sie im Abschnitt Beispiele für die Komponente „Ortsdetails“.

Visuelle Darstellung anpassen

Visuelle Anpassung von Ortsdetails
Beispiele für die visuelle Anpassung

Das Places UI-Kit bietet einen Designsystemansatz für die visuelle Anpassung, der in etwa auf Material Design basiert (mit einigen Google Maps-spezifischen Änderungen). Weitere Informationen finden Sie in den Material Design-Referenzen zu Farbe und Typografie. Standardmäßig entspricht der Stil der visuellen Designsprache von Google Maps.

Optionen zum Anpassen von Ortsdetails

Das Erscheinungsbild der Komponente wird mit den Structs placesMaterialColor, placesMaterialFont, placesMaterialShape und placesMaterialTheme angepasst.

Sie können die folgenden Stile anpassen:

Farbe und Typografie von Dialogfeldern anpassen
Farben und Typografie des Dialogfelds anpassen
Designattribut Nutzung
Farbe
theme.color.surface Container- und Dialoghintergrund
theme.color.outlineDecorative Containerrahmen
theme.color.primary Links, Ladeanzeige, Übersichtssymbole
theme.color.onSurface Überschriften, Dialoginhalte
theme.color.onSurfaceVariant Informationen zum Ort
theme.color.secondaryContainer Schaltflächenhintergrund
theme.color.onSecondaryContainer Schaltflächentext und ‑symbol
theme.color.neutralContainer Datumsbadge und Platzhalterformen für das Laden
theme.color.onNeutralContainer Rezensionsdatum, Ladefehler
theme.color.positiveContainer Verfügbares Logo für Ladestationen für Elektrofahrzeuge
theme.color.onPositiveContainer Verfügbare Inhalte für das Logo „Ladegerät für Elektrofahrzeuge“
theme.color.positive Label „Jetzt geöffnet“ platzieren
theme.color.negative Label „Geschlossen“ für Orte
theme.color.info Symbol für barrierefreien Eingang
theme.measurement.borderWidthButton Schaltflächen „In Maps öffnen“ und „OK“
   
Typografie
theme.font.bodySmall Informationen zum Ort
theme.font.bodyMedium Ortsinformationen, Dialoginhalte
theme.font.labelMedium Inhalt des Logos
theme.font.labelLarge Schaltflächeninhalt
theme.font.headlineMedium Dialogüberschriften
theme.font.displaySmall Name
theme.font.titleSmall Name
   
Abstand
theme.measurement.spacingExtraSmall
theme.measurement.spacingSmall
theme.measurement.spacingMedium
theme.measurement.spacinglarge
theme.measurement.spacingExtraLarge
theme.measurement.spacingTwoExtraLarge
   
Messung
borderWidth Container
theme.measurement.borderWidthButton
   
Form
theme.shape.cornerRadius Container
theme.shape.cornerRadiusButton Schaltflächen „In Maps öffnen“ und „OK“ (runde Symbolschaltfläche ausgenommen)
theme.shape.cornerRadiusThumbnail Miniaturansicht des Orts
theme.shape.cornerRadiusCollageOuter Mediencollage
theme.shape.cornerRadiusCard Karte für Ort, Karte für Nutzerrezensionen
theme.shape.cornerRadiusDialog Offenlegungsdialogfeld für Google Maps
   
Markenattribute in Google Maps
attribution.lightModeColor Schaltfläche für die Quellenangabe und Offenlegung von Google Maps im hellen Design (Enumerationen für Weiß, Grau und Schwarz)
attribution.darkModeColor Schaltfläche für Attribution und Offenlegung für das dunkle Design von Google Maps (Enumerationen für Weiß, Grau und Schwarz)

Beispiele finden Sie im Abschnitt Beispiele für die Komponente „Ortsdetails“.

Breite und Höhe anpassen

Kompaktansichten

Empfohlene Breiten:

  • Vertikale Ausrichtung: Zwischen 180 und 300 Pixeln.
  • Horizontale Ausrichtung: Zwischen 180 und 500 Pixeln.

Es empfiehlt sich, keine Höhe für kompakte Ansichten festzulegen. So kann die Höhe des Fensters an den Inhalt angepasst werden, damit alle Informationen angezeigt werden.

Breiten unter 160 Pixel werden möglicherweise nicht richtig angezeigt.

Vollständige Wiedergaben

Für die Vollansicht wird eine Breite zwischen 250 und 450 Pixeln empfohlen. Eine Breite von weniger als 250 Pixeln wird möglicherweise nicht richtig angezeigt.

Sie können die Höhe der Komponente festlegen. Die vertikale Ansicht mit den Ortsdetails wird innerhalb des zugewiesenen Bereichs vertikal gescrollt.

Es empfiehlt sich, eine Höhe für Vollansichten festzulegen. So kann der Inhalt im Fenster richtig gescrollt werden.

Attributionsfarben

Attribution
Attribution

Gemäß den Nutzungsbedingungen von Google Maps müssen Sie für die Quellenangabe von Google Maps eine von drei Markenfarben verwenden. Diese Quellenangabe muss sichtbar und zugänglich sein, wenn Anpassungen vorgenommen wurden.

Sie können aus drei Markenfarben wählen, die unabhängig für helle und dunkle Designs festgelegt werden können:

  • Helles Design: attributionColorLight mit Enums für Weiß, Grau und Schwarz.
  • Dunkles Design: attributionColorDark mit Enums für Weiß, Grau und Schwarz.

Beispiele für die „Place Details“-Komponente

Vollständige Ansicht mit vertikalem Layout erstellen

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
    )

Kompakte Ansicht mit horizontalem Layout erstellen

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
    )

Vollständige Ansicht mit vertikalem Layout erstellen

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
  )

Stilattribute anpassen

In diesem Beispiel wird gezeigt, wie Sie die Standardstilattribute einer vollständigen oder kompakten Ansicht anpassen.

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
}

Bestimmte Inhalte anzeigen

In diesem Beispiel wird eine kompakte Ansicht erstellt, in der nur Medien, Adresse, Bewertung und Typ angezeigt werden. Dabei wird das im vorherigen Beispiel erstellte Design verwendet.

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