Google地图中的自动完成搜索栏

Enr*_*cer 6 java android google-maps searchbar google-maps-android-api-2

我正在根据地点搜索创建一个应用程序.我想知道如何在Google地图中添加搜索栏,用户可以在其中选择地点,我可以捕捉用户选择的内容.

我正在尝试在UI中包含显示在Google地图上方的自动填充搜索框.

Dan*_*ent 15

您只需使用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'
Run Code Online (Sandbox Code Playgroud)

然后在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>
Run Code Online (Sandbox Code Playgroud)

然后在Activity中设置一个监听器:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

运行此代码时,您会在Google地图上方看到自动完成栏:

在此输入图像描述

单击"自动完成"栏时,它将如下所示:

在此输入图像描述

然后,开始输入,然后选择一个地方:

在此输入图像描述

当您点击某个位置进行选择时,您将看到PlaceSelectionListener中的日志:

D/Maps: Place selected: San Francisco
Run Code Online (Sandbox Code Playgroud)

  • 单击搜索栏后很快就会失去焦点。有什么问题吗?我尝试了上面给出的解决方案!@丹尼尔纽金特 (2认同)