基本地点自动补全组件
借助 Places UI Kit 的基本地点自动补全组件,您可以添加一个单独的界面组件,当用户选择地点时,该组件会返回一个 地点 ID。该组件是一个全屏覆盖层,可为用户提供一个搜索栏来输入查询。当用户输入内容时,搜索栏下方会显示自动补全结果列表。当用户点按某个地点时,系统会向开发者返回一个仅包含地点 ID 的地点对象。此组件是可自定义的。
基本地点自动补全组件具有以下自定义选项:列表密度,以及是否包含位置图标。使用 AutocompleteUICustomization 自定义组件。
您可以单独使用基本地点自动补全组件,也可以将其与其他 Google 地图平台 API 和服务结合使用。
结算
每次打开组件并进行查询时,系统都会向您收费。除非会话过期或从列表中选择了一个地点,否则系统不会针对该会话再次向您收费。
将基本自动补全组件添加到应用中
设置自动补全过滤条件参数(例如,要返回的类型、要将结果限制到的国家/地区、结果的区域坐标、要显示距离信息的请求来源,如果可用),就像您在不使用 Places UI Kit 的情况下使用地点自动补全(新)一样。如需查看完整说明和用于创建自动补全过滤条件的代码示例,请参阅地点自动补全(新)文档。
创建自动补全过滤条件后,添加界面自定义项。请参阅自定义选项和说明。
Kotlin
AutocompleteUiCustomization.create( listDensity = AutocompleteListDensity.MULTI_LINE, listItemIcon = AutocompleteUiIcon.noIcon(), theme = R.style.CustomizedTheme, )
Java
AutocompleteUiCustomization.builder() .listItemIcon(AutocompleteUiIcon.noIcon()) .listDensity(AutocompleteListDensity.MULTI_LINE) .theme(R.style.CustomizedTheme) .build()
自定义基本自动补全组件
自定义内容
列表显示密度
您可以选择显示双行列表或多行列表。使用 AutocompleteUICustomization 类中的 AutocompleteListDensity(TWO_LINE 或 MULTI_LINE)中的选项。如果您未指定列表显示密度,该组件将显示双行列表。
位置图标
您可以选择是否在结果列表中显示默认地点图标。使用 AutocompleteUICustomization 类中的 AutocompleteUIIcon(listItemDefaultIcon 或 noIcon)中的选项。
自定义主题
您可以指定一个主题来替换任何默认样式属性。您可以自定义地点详情组件的颜色、排版、间距、边框和圆角。默认值为 PlacesMaterialTheme。
任何未被替换的主题属性都将使用默认样式。
Places UI Kit 默认提供深色主题,因此您可能需要自定义深色和浅色主题。如需自定义深色主题,请在 values-night/colors.xml 中为颜色添加条目。
如需详细了解主题,请参阅自定义样式部分。
向基本自动补全组件添加内容和主题自定义项
使用 AutocompleteUICustomization 类自定义基本自动补全组件。
Kotlin
.setAutocompleteUiCustomization( AutocompleteUiCustomization.create( listDensity = AutocompleteListDensity.MULTI_LINE, listItemIcon = AutocompleteUiIcon.noIcon(), theme = R.style.CustomizedTheme, ) )
Java
.setAutocompleteUiCustomization( AutocompleteUiCustomization.builder() .listItemIcon(AutocompleteUiIcon.noIcon()) .listDensity(AutocompleteListDensity.MULTI_LINE) .theme(R.style.CustomizedTheme) .build() )
示例
添加自定义的基本自动补全组件。
Kotlin
val basicPlaceAutocompleteActivityResultLauncher: ActivityResultLauncher<Intent> = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult -> val intent = result.data val place: Place? = BasicPlaceAutocomplete.getPlaceFromIntent(intent!!) val status: Status? = BasicPlaceAutocomplete.getResultStatusFromIntent(intent!!) // ... } val autocompleteIntent: Intent = BasicPlaceAutocomplete.createIntent(this) { setInitialQuery("INSERT_QUERY_TEXT") setOrigin(LatLng(10.0, 10.0)) // ... setAutocompleteUiCustomization( AutocompleteUiCustomization.create( listDensity = AutocompleteListDensity.MULTI_LINE, listItemIcon = AutocompleteUiIcon.noIcon(), theme = R.style.CustomizedTheme, ) ) } basicPlaceAutocompleteActivityResultLauncher.launch(autocompleteIntent)
Java
ActivityResultLauncher<Intent> basicPlaceAutocompleteActivityResultLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() { @Override public void onActivityResult(ActivityResult result) { Intent intent = result.getData(); if (intent != null) { Place place = BasicPlaceAutocomplete.getPlaceFromIntent(intent); Status status = BasicPlaceAutocomplete.getResultStatusFromIntent(intent); //... } } } ); Intent basicPlaceAutocompleteIntent = new BasicPlaceAutocomplete.IntentBuilder() .setInitialQuery("INSERT_QUERY_TEXT") .setOrigin(new LatLng(10.0, 10.0)) //... .setAutocompleteUiCustomization( AutocompleteUiCustomization.builder() .listItemIcon(AutocompleteUiIcon.noIcon()) .listDensity(AutocompleteListDensity.MULTI_LINE) .theme(R.style.CustomizedTheme) .build()) .build(this); basicPlaceAutocompleteActivityResultLauncher.launch(basicPlaceAutocompleteIntent);
自定义主题
Places UI Kit 默认提供深色主题,因此您可能需要自定义深色和浅色主题。如需自定义深色主题,请在 values-night/colors.xml 中为颜色添加条目。
<style name="CustomizedTheme" parent="PlacesMaterialTheme"> <item name="placesColorPrimary">@color/app_primary_color</item> <item name="placesColorOnSurface">@color/app_color_on_surface</item> <item name="placesColorOnSurfaceVariant">@color/app_color_on_surface</item> <item name="placesTextAppearanceBodySmall">@style/app_text_appearence_small</item> <item name="placesCornerRadius">20dp</item> </style>