/ AutoComplete

Cute kotlin library to implement PlaceAutocomplete in Android

Cute kotlin library to implement PlaceAutocomplete in Android

AutocompleteLocationAndroid

Cute library to implement PlaceAutocomplete in android based in jotaramirez90 AutocompleteLocation library.

init

autocomplete

place

First Steps

In your Project build.gradle you must have the following

buildscript {
    ...
    repositories {
        ...
        jcenter()
    }
    ...
    dependencies {
        ...
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
    ...
}

In your App build.gradle you must have the following

...
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
...
dependencies {
    ...
    implementation "com.jesualex.android:autocompletelocation:$last_version"
}

Get a Google Maps API Key and enabled the Google Places API for Android (Add your API Key in values):

  <resources>
    <string name="google_places_key"
        translatable="false"
        templateMergeStrategy="preserve">YOUR_KEY_HERE</string>
  </resources>

Add the AutocompleteLocation into the layout:

  <com.jesualex.autocompletelocation.AutocompleteLocation
      android:id="@+id/autocomplete_location"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>

Set the listeners(All are optional for more comfort):

public class MainActivity extends FragmentActivity
    implements AutocompleteLocation.AutocompleteLocationListener {

  @Override protected void onCreate(Bundle savedInstanceState) {
    ...
    AutocompleteLocation autoCompleteLocation =
        (AutocompleteLocation) findViewById(R.id.autocomplete_location);
        autoCompleteLocation.setAutoCompleteTextListener(this);
        autoCompleteLocation.setOnSearchListener(this);
  }
}

AutoCompleteText Listener:

  @Override public void onTextClear() {
    mMap.clear();
  }

  @Override public void onItemSelected(AutocompletePrediction selectedPrediction) {
    Log.i(getClass().getSimpleName(), "A autocomplete has selected: ");
    logAutocomplete(selectedPrediction);
  }

Place Listener(When this listener is set, after selecting a prediction, the associated place is automatically searched):

    ...
    AutocompleteLocation autoCompleteLocation =
        (AutocompleteLocation) findViewById(R.id.autocomplete_location);
    ...
    //Set placeListener to auto calculate Place object when a AutocompletePrediction has selected.
    autoCompleteLocation.setPlaceListener(this);
    
    //Optional set placeFields to receive only the fields what you need. By default return ID, NAME and LAT_LNG.
    autoCompleteLocation.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME););
  @Override public void onPlaceLoad(@NonNull Place place) {
    addMapMarker(place.getLatLng());
  }

Search Listener:

  @Override public void onSearch(String address, List<AutocompletePrediction> predictions) {
    for (AutocompletePrediction prediction : predictions) {
      logAutocomplete(prediction);
    }
  }

Limit results by Country:

    ...
    AutocompleteLocation autoCompleteLocation =
        (AutocompleteLocation) findViewById(R.id.autocomplete_location);
    ...
    autoCompleteLocation.setCountry("Au");
  <com.jesualex.autocompletelocation.AutocompleteLocation
      android:id="@+id/autocomplete_location"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:countryCode="au" />

Limit results by Bounds:

    ...
    AutocompleteLocation autoCompleteLocation =
        (AutocompleteLocation) findViewById(R.id.autocomplete_location);
    ...
    RectangularBounds bounds = RectangularBounds.newInstance(
            new LatLng(-33.880490, 151.184363),
            new LatLng(-33.858754, 151.229596)
    );
    
    autoCompleteLocation.setLocationBias(bounds);

Get Place by Id:

    PlaceUtils.getPlace(context, "placeId", new OnPlaceLoadListener() {
      @Override
      public void onPlaceLoad(@NonNull Place place) {
        addMapMarker(place.getLatLng());
      }
    });

Style it!

Attributes for custom AutocompleteLocation

  • background_layout
  • closeIcon
  <com.jesualex.autocompletelocation.AutocompleteLocation
      android:id="@+id/autocomplete_location"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:background_layout="@drawable/bg_rounded_accent"
      app:closeIcon="@drawable/ic_close" />

GitHub