我正在创建一个基于位置搜索的应用程序。我想知道如何才能添加到我的谷歌Map搜索栏,用户可以选择一个地方,我可以捕捉到用户选择。我试图包括一个自动完成搜索框,显示在谷歌Map上方的用户界面。
svmlkihl1#
您可以简单地使用placeautocompletefragment。首先确保您使用的是最新版本的google play服务(8.4.0及更高版本包括placeautocompletefragment类):
compile 'com.google.android.gms:play-services-maps:11.0.2' compile 'com.google.android.gms:play-services-location:11.0.2' compile 'com.google.android.gms:play-services-places:11.0.2'
然后在xml布局中包含placeautocompletefragment:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MapsActivity" android:orientation="vertical" android:weightSum="1"> <fragment android:id="@+id/place_autocomplete" android:layout_width="match_parent" android:layout_height="wrap_content" android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment" /> <fragment android:id="@+id/map" class="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
然后在活动中设置侦听器:
import com.google.android.gms.common.api.Status; import com.google.android.gms.location.places.Place; import com.google.android.gms.location.places.ui.PlaceAutocompleteFragment; import com.google.android.gms.location.places.ui.PlaceSelectionListener; public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback { private GoogleMap mMap; PlaceAutocompleteFragment placeAutoComplete; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); placeAutoComplete = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.place_autocomplete); placeAutoComplete.setOnPlaceSelectedListener(new PlaceSelectionListener() { @Override public void onPlaceSelected(Place place) { Log.d("Maps", "Place selected: " + place.getName()); } @Override public void onError(Status status) { Log.d("Maps", "An error occurred: " + status); } }); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; } }
运行此代码时,您将看到googleMap上方的自动完成栏:当您单击自动完成栏时,它将如下所示:然后,开始键入,并选择一个位置:当您点击一个地方来选择它时,您将看到placeselectionlistener中的日志:
D/Maps: Place selected: San Francisco
u7up0aaq2#
是的,您可以通过addmarker的make方法来完成。当您按下该位置时,您可以使用以下代码:
public class PlaceAutocompleteActivity extends AppCompatActivity implements OnMapReadyCallback { private GoogleMap mMap; PlaceAutocompleteFragment placeAutoComplete; LatLng myLat; Place placey; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_autocompleteplaces); getSupportActionBar().setTitle("Search about a Place"); placeAutoComplete = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.place_autocomplete); placeAutoComplete.setOnPlaceSelectedListener(new PlaceSelectionListener() { @Override public void onPlaceSelected(Place place) { addMarker(place); } @Override public void onError(Status status) { Log.d("Maps", "An error occurred: " + status); } }); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.mapplaces); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; } public void addMarker(Place p){ MarkerOptions markerOptions = new MarkerOptions(); markerOptions.position(p.getLatLng()); markerOptions.title(p.getName()+""); markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)); mMap.addMarker(markerOptions); mMap.moveCamera(CameraUpdateFactory.newLatLng(p.getLatLng())); mMap.animateCamera(CameraUpdateFactory.zoomTo(13)); } }
2条答案
按热度按时间svmlkihl1#
您可以简单地使用placeautocompletefragment。
首先确保您使用的是最新版本的google play服务(8.4.0及更高版本包括placeautocompletefragment类):
然后在xml布局中包含placeautocompletefragment:
然后在活动中设置侦听器:
运行此代码时,您将看到googleMap上方的自动完成栏:
当您单击自动完成栏时,它将如下所示:
然后,开始键入,并选择一个位置:
当您点击一个地方来选择它时,您将看到placeselectionlistener中的日志:
u7up0aaq2#
是的,您可以通过addmarker的make方法来完成。当您按下该位置时,您可以使用以下代码: