it-swarm.com.ru

Панель автозаполнения поиска в Картах Google

Я создаю приложение на основе поиска мест. Я хотел бы знать, как я могу добавить панель поиска на свою карту Google, где пользователь может выбрать место, а я могу зафиксировать то, что выбрал пользователь.

Я пытаюсь включить окно поиска автозаполнения, которое отображается над картой Google в пользовательском интерфейсе.

5
Enrique Alcacer

Вы можете просто использовать 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'

Затем включите PlaceAutoCompleteFragment в свой XML-макет:

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

Когда вы запустите этот код, вы увидите панель автозаполнения над картой Google:

 enter image description here

Когда вы нажимаете на панель автозаполнения, она будет выглядеть так:

 enter image description here

Затем начните вводить текст и выберите место:

 enter image description here

Когда вы нажмете на место, чтобы выбрать его, вы увидите журнал из PlaceSelectionListener:

D/Maps: Place selected: San Francisco
15
Daniel Nugent

Да, вы можете сделать это методом make для addMarker, когда вы нажимаете на месте. Вы можете использовать этот код:

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

}

}

1
Hamdan Hejazi