“地点搜索”组件
Places 界面套件的“地点搜索”组件会在列表中呈现地点搜索结果。

您可以自定义地点搜索列表。您可以指定:
- 要显示的内容
- 垂直方向的媒体尺寸
- 文本截断
- 方向
- 与您的品牌和应用的设计语言相符的主题替换项
- 注明内容来源的位置
- 相应地点是否可供选择
您还可以自定义请求,以执行 Search by text request
或 Search Nearby request
。
结算
每次更改 configureFromSearchByTextRequest()
或 configureFromSearchNearbyRequest()
绑定值时,系统都会向您收取费用。
向您的应用添加地点搜索功能
通过将 PlaceSearchFragment
fragment 添加到布局来使用地点搜索 widget。
当您希望应用加载文字搜索或附近搜索结果时,请使用相应请求调用 configureFromSearchByTextRequest()
或 configureFromSearchNearbyRequest()
。
Kotlin
fragment.configureFromSearchByTextRequest(searchByTextRequest) // or fragment.configureFromSearchNearbyRequest(searchNearbyRequest) for nearby search
Java
fragment.configureFromSearchByTextRequest(searchByTextRequest) // or fragment.configureFromSearchNearbyRequest(searchNearbyRequest) for nearby search
您还可以向组件添加可选的 PlaceSearchFragmentListener
,以便在组件加载时、选择地点时(如果设置为可选择)或加载组件时发生错误时接收回调。
Kotlin
fragment.registerListener( object : PlaceSearchFragmentListener { override fun onLoad(places: List<Place>) {...} override fun onRequestError(e: Exception) {...} override fun onPlaceSelected(place: Place) {...} } )
Java
fragment.registerListener( new PlaceSearchFragmentListener() { @Override public void onLoad(List<? extends Place> places) {...} @Override public void onRequestError(Exception e) {...} @Override public void onPlaceSelected(Place place) {...} } )
自定义地点搜索组件
自定义内容
您必须指定组件将显示哪些内容。此示例将组件配置为显示 Place 的地址和评分。
Kotlin
val fragment = PlaceSearchFragment.newInstance(listOf(Content.ADDRESS, Content.RATING))
Java
PlaceSearchFragment fragment = PlaceSearchFragment.newInstance(listOf(Content.ADDRESS,Content.RATING));
您还可以选择自定义地点搜索组件中显示的内容的以下方面:
- PlaceSearchFragment.Content:组件中显示的内容。
- mediaSize:照片在 fragment 纵向方向上的大小。默认值为
SMALL
。 - preferTruncation:是否截断每个地点详情视图的文本。
- attributionPosition:是否在组件顶部或底部显示 Google 地图提供方信息。
- 可选择:列表中每个地点是否可选择。
将自定义配置添加到 PlaceSearchFragment
。
Kotlin
fragment.preferTruncation = false fragment.attributionPosition = AttributionPosition.BOTTOM fragment.mediaSize = MediaSize.SMALL fragment.selectable = true
Java
fragment.setPreferTruncation(false) fragment.setAttributionPosition(AttributionPosition.BOTTOM) fragment.setMediaSize(MediaSize.SMALL) fragment.setSelectable(true)
自定义屏幕方向
默认方向为竖屏。对于横向,请在 PlaceSearchFragment.newInstance()
中指定 Orientation.HORIZONTAL
。
Kotlin
PlaceSearchFragment.newInstance( PlaceSearchFragment.ALL_CONTENT, Orientation.HORIZONTAL )
Java
PlaceSearchFragment.newInstance( PlaceSearchFragment.ALL_CONTENT, Orientation.HORIZONTAL )
自定义主题
实例化 fragment 时,您可以指定一个主题来替换任何默认样式属性。默认值为 PlacesMaterialTheme
。如需详细了解主题设置,请参阅 Place Details Component 文档。
未被覆盖的任何主题背景属性都将使用默认样式。如果您想支持深色主题,可以在 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>
示例
Kotlin
val fragment: PlaceSearchFragment = PlaceSearchFragment.newInstance(PlaceSearchFragment.STANDARD_CONTENT) fragment.preferTruncation = false fragment.attributionPosition = AttributionPosition.BOTTOM fragment.mediaSize = MediaSize.SMALL fragment.selectable = true fragment.registerListener( object : PlaceSearchFragmentListener { override fun onLoad(places: List<Place>) {...} override fun onRequestError(e: Exception) {...} override fun onPlaceSelected(place: Place) {...} } ) supportFragmentManager .beginTransaction() .replace(R.id.fragment_container, fragment) .commitNow() fragment.configureFromSearchByTextRequest(searchByTextRequest)
Java
PlaceSearchFragment fragment = PlaceSearchFragment.newInstance(PlaceSearchFragment.STANDARD_CONTENT); fragment.setPreferTruncation(false) fragment.setAttributionPosition(AttributionPosition.BOTTOM) fragment.setMediaSize(MediaSize.SMALL) fragment.setSelectable(true) fragment.registerListener( new PlaceSearchFragmentListener() { @Override public void onLoad(List<? extends Place> places) {...} @Override public void onRequestError(Exception e) {...} @Override public void onPlaceSelected(Place place) {...} } ) getSupportFragmentManager() .beginTransaction() .replace(R.id.fragment_container, fragment) .commitNow(); fragment.configureFromSearchByTextRequest(searchByTextRequest)