Seleziona la piattaforma: Android iOS JavaScript

Componente Place Details

Il componente Place Details di Places UI Kit ti consente di aggiungere un singolo componente UI che mostra i dettagli del luogo nella tua app. Questo componente è personalizzabile.

Componente compatto Dettagli del luogo

Il componente Dettagli luogo può essere utilizzato in modo indipendente o in combinazione con altri servizi e API di Google Maps Platform. Il componente accetta un ID luogo, un nome della risorsa o coordinate di latitudine/longitudine e restituisce le informazioni di Place Details visualizzate.

Il componente Dettagli luogo è completamente personalizzabile, il che ti consente di modificare caratteri, colori e raggi angolari in base al tuo caso d'uso e alle linee guida per il brand visivo. Puoi personalizzare l'aspetto dei dettagli del luogo fornendo valori PlacesMaterialTheme personalizzati. Puoi anche personalizzare i campi dei dettagli del luogo inclusi specificando un elenco di voci PlaceDetailsCompactView, ognuna delle quali corrisponde a un'informazione mostrata sul luogo.

Varianti di layout

Il componente Place Details supporta due varianti di layout principali:

  • Compatto:un layout per visualizzare in anteprima le informazioni chiave.
  • Completo:un layout completo che mostra tutti i dettagli disponibili del luogo.

Il layout compatto può essere visualizzato in orientamento verticale o orizzontale. In questo modo puoi integrare il componente in vari layout di design e dimensioni dello schermo. Il layout completo può essere visualizzato solo verticalmente.

layout orizzontali e verticali
Layout orizzontali e verticali

Il componente Dettagli del luogo ti offre un controllo granulare sui contenuti visualizzati nel componente. Ogni elemento (come foto, recensioni e dati di contatto) può essere mostrato o nascosto singolarmente, consentendo una personalizzazione precisa dell'aspetto dei componenti e della densità delle informazioni.

Opzioni contenuti dei dettagli del luogo
Opzioni di visualizzazione dei contenuti

Visualizzazione compatta dei dettagli del luogo

La visualizzazione compatta di Place Details (PlaceDetailsCompactView) mostra i dettagli di un luogo selezionato utilizzando uno spazio minimo. Questo può essere utile in una finestra informativa che mette in evidenza un luogo su una mappa, in un'esperienza sui social media come la condivisione di una posizione in una chat, come suggerimento per selezionare la tua posizione attuale o all'interno di un articolo multimediale per fare riferimento al luogo su Google Maps.

Visualizzazione completa dei dettagli del luogo

La visualizzazione completa dei dettagli del luogo (PlaceDetailsView) offre una superficie più ampia per visualizzare le informazioni dettagliate sul luogo e consente di visualizzare più tipi di informazioni.

Opzioni di visualizzazione dei contenuti

Puoi specificare i contenuti da visualizzare utilizzando le enumerazioni in PlaceDetailsCompactContent o PlaceDetailsContent.

Visualizzazione compatta Visualizzazione completa
  • Foto del luogo
  • Indirizzo del luogo
  • Valutazione e conteggio valutazioni
  • Tipo di luogo
  • Prezzo
  • Informazioni sull'ingresso accessibile
  • Stato Aperto adesso
  • Collage di foto del luogo
  • Indirizzo del luogo
  • Valutazione e conteggio valutazioni
  • Tipo di luogo
  • Prezzo
  • Informazioni sull'accessibilità
  • Stato Aperto adesso
  • Orario di apertura
  • Riassunto editoriale
  • Sito web
  • Numero di telefono
  • Recensioni visualizzate in una scheda dedicata
  • Plus Code
  • Elenco delle funzionalità, visualizzato in una scheda dedicata
  • Elementi in evidenza specifici per tipo, ad esempio i prezzi del carburante per le stazioni di servizio

Fatturazione

Quando utilizzi Places UI Kit, ti viene addebitato un costo ogni volta che viene chiamato il metodo PlaceDetailsQuery. Se carichi lo stesso luogo più volte, ti viene addebitato un importo per ogni richiesta.

Aggiungere i dettagli dei luoghi all'app

Il componente Place Details è una visualizzazione Swift UI. Puoi personalizzare l'aspetto e lo stile delle informazioni sui dettagli del luogo in base alle tue esigenze e all'aspetto della tua app. Scopri di più sulla personalizzazione.

Puoi scegliere di caricare il componente Dettagli luogo con un ID luogo, un nome risorsa o coordinate di latitudine/longitudine. Puoi scegliere uno o più metodi. Imposta identifier nella struttura PlaceDetailsQuery su .placeID, .resourceName o .coordinate.

La posizione predefinita per la visualizzazione compatta è verticale. Se vuoi un layout orizzontale, specifica orientation: .horizontal in PlaceDetailsCompactView. Puoi anche specificare facoltativamente orientation: .vertical per maggiore chiarezza. La visualizzazione completa può essere visualizzata solo in verticale.

Vedi gli esempi nella sezione Esempi di componenti Dettagli luogo.

Personalizzare l'aspetto visivo

Personalizzazione visiva dei dettagli del luogo
Esempi di personalizzazione visiva

Il kit UI Places offre un approccio di sistema di progettazione alla personalizzazione visiva basato approssimativamente su Material Design (con alcune modifiche specifiche di Google Maps). Consulta il riferimento di Material Design per Colori e Tipografia. Per impostazione predefinita, lo stile rispetta il linguaggio di progettazione visiva di Google Maps.

Opzioni di personalizzazione dei dettagli del luogo

L'aspetto del componente viene personalizzato con le struct placesMaterialColor, placesMaterialFont, placesMaterialShape e placesMaterialTheme.

Puoi personalizzare i seguenti stili:

Personalizzazione del colore e della tipografia delle finestre di dialogo
Personalizzazione del colore e della tipografia della finestra di dialogo
Attributo tema Utilizzo
Colore
theme.color.surface Sfondo del contenitore e della finestra di dialogo
theme.color.outlineDecorative Bordo del contenitore
theme.color.primary Link, indicatore di caricamento, icone di panoramica
theme.color.onSurface Intestazioni, contenuti della finestra di dialogo
theme.color.onSurfaceVariant Informazioni sul luogo
theme.color.secondaryContainer Sfondo pulsante
theme.color.onSecondaryContainer Testo e icona del pulsante
theme.color.neutralContainer Esamina il badge della data e le forme segnaposto di caricamento
theme.color.onNeutralContainer Data della revisione, errore di caricamento
theme.color.positiveContainer Badge Stazione di ricarica EV disponibile
theme.color.onPositiveContainer Contenuti del badge per caricabatterie EV disponibili
theme.color.positive Posiziona l'etichetta "Aperto ora"
theme.color.negative Etichetta "Chiuso" ora
theme.color.info Icona Ingresso accessibile
theme.measurement.borderWidthButton Pulsanti Apri in Maps e OK
   
Tipografia
theme.font.bodySmall Informazioni sul luogo
theme.font.bodyMedium Informazioni sul luogo, contenuti della finestra di dialogo
theme.font.labelMedium Contenuti del badge
theme.font.labelLarge Contenuto del pulsante
theme.font.headlineMedium Intestazioni delle finestre di dialogo
theme.font.displaySmall Nome del luogo
theme.font.titleSmall Nome del luogo
   
Spaziatura
theme.measurement.spacingExtraSmall
theme.measurement.spacingSmall
theme.measurement.spacingMedium
theme.measurement.spacinglarge
theme.measurement.spacingExtraLarge
theme.measurement.spacingTwoExtraLarge
   
Misurazione
borderWidth Container
theme.measurement.borderWidthButton
   
Forma
theme.shape.cornerRadius Container
theme.shape.cornerRadiusButton Pulsanti Apri in Maps e OK (escluso il pulsante icona rotonda)
theme.shape.cornerRadiusThumbnail Posizionare l'immagine in miniatura
theme.shape.cornerRadiusCollageOuter Collage multimediale
theme.shape.cornerRadiusCard Scheda luogo, scheda recensione utente
theme.shape.cornerRadiusDialog Finestra di dialogo di divulgazione di Google Maps
   
Attribuzione del brand Google Maps
attribution.lightModeColor Pulsante di attribuzione e informativa di Google Maps con tema chiaro (enumerazioni per bianco, grigio e nero)
attribution.darkModeColor Pulsante di attribuzione e informativa del tema scuro di Google Maps (enumerazioni per bianco, grigio e nero)

Vedi gli esempi nella sezione Esempi di componenti Dettagli luogo.

Personalizzazione di larghezza e altezza

Visualizzazioni compatte

Larghezze consigliate:

  • Orientamento verticale: tra 180 e 300 pixel.
  • Orientamento orizzontale: tra 180 e 500 pixel.

La best practice prevede di non impostare un'altezza per le visualizzazioni compatte. In questo modo, l'altezza della finestra verrà impostata in base ai contenuti, consentendo la visualizzazione di tutte le informazioni.

Le larghezze inferiori a 160 pixel potrebbero non essere visualizzate correttamente.

Visualizzazioni complete

Per le visualizzazioni complete, la larghezza consigliata è compresa tra 250 e 450 pixel. Una larghezza inferiore a 250 pixel potrebbe non essere visualizzata correttamente.

Puoi impostare l'altezza del componente: la visualizzazione verticale dei dettagli del luogo scorrerà verticalmente nello spazio assegnato.

La best practice prevede di impostare un'altezza per le visualizzazioni complete. In questo modo, i contenuti nella finestra scorreranno correttamente.

Colori di attribuzione

attribuzione
Attribuzione

I Termini di servizio di Google Maps richiedono di utilizzare uno dei tre colori del brand per l'attribuzione di Google Maps. Questa attribuzione deve essere visibile e accessibile quando sono state apportate modifiche alla personalizzazione.

Offriamo tre colori del brand tra cui scegliere, che possono essere impostati in modo indipendente per i temi chiaro e scuro:

  • Tema chiaro: attributionColorLight con enumerazioni per bianco, grigio e nero.
  • Tema scuro: attributionColorDark con enumerazioni per bianco, grigio e nero.

Esempi di componenti Place Details

Crea una visualizzazione completa con layout verticale

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
    )

Creare una visualizzazione compatta con layout orizzontale

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
    )

Creare una visualizzazione completa con layout verticale

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
  )

Personalizzare gli attributi di stile

Questo esempio mostra come personalizzare gli attributi di stile predefiniti di una visualizzazione completa o compatta.

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
}

Visualizzare contenuti specifici

Questo esempio crea una visualizzazione compatta che mostra solo contenuti multimediali, indirizzo, valutazione e tipo, utilizzando il tema creato nell'esempio precedente.

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