title: Change position of MyLocation Button in MapsActivity
body: <p>I am trying to change the position of my location button in my Maps Android App from top to bottom. Seems like it is default in top. Please help me changing the position of it. I have taken the code from the google samples github. This is the new version of code which uses <code>getMapAsync</code> instead of <code>getMap</code>.</p>
  
  <p><a href="https://i.stack.imgur.com/pYqpO.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/pYqpO.png" alt="enter image description here"></a></p>
  
  <p><strong><em>MapsActivity.java:</em></strong></p>
  
  <pre><code>public class MapsActivity extends AppCompatActivity implements GoogleMap.OnMyLocationButtonClickListener,
        GoogleMap.OnMyLocationClickListener,
        OnMapReadyCallback,
        ActivityCompat.OnRequestPermissionsResultCallback {
  
    /**
    * Request code for location permission request.
    *
    * @see #onRequestPermissionsResult(int, String[], int[])
    */
    private static final int LOCATION_PERMISSION_REQUEST_CODE = 1;
  
    /**
    * Flag indicating whether a requested permission has been denied after returning in
    * {@link #onRequestPermissionsResult(int, String[], int[])}.
    */
    private boolean mPermissionDenied = false;
  
    private GoogleMap mMap;
  
    private PlaceAutocompleteFragment placeAutocompleteFragment;
  
    Marker marker;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
  
        SupportMapFragment mapFragment =
                (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
  
  
        placeAutocompleteFragment = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
        // placeAutocompleteFragment.setFilter(new AutocompleteFilter.Builder().setCountry("ID").build());
        placeAutocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
            @Override
            public void onPlaceSelected(Place place) {
                final LatLng latLngLoc = place.getLatLng();
  
                if (marker != null) {
                    marker.remove();
                }
                marker = mMap.addMarker(new MarkerOptions().position(latLngLoc).title(place.getName().toString()));
                mMap.moveCamera(CameraUpdateFactory.newLatLng(latLngLoc));
                mMap.animateCamera(CameraUpdateFactory.zoomTo(12), 2000, null);
            }
  
            @Override
            public void onError(Status status) {
                Toast.makeText(MapsActivity.this, "" + status.toString(), Toast.LENGTH_SHORT).show();
            }
        });
  
  
    }
  
  
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
  
        mMap.setOnMyLocationButtonClickListener(this);
        mMap.setOnMyLocationClickListener(this);
        enableMyLocation();
  
  
        mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
            @Override
            public void onMapClick(LatLng point) {
  
                // Creating a marker
                MarkerOptions markerOptions = new MarkerOptions();
  
                // Setting the position for the marker
                markerOptions.position(point);
  
  
                // changing the marker title
                double lat = point.latitude;
                double lng = point.longitude;
                Geocoder gc = new Geocoder(MapsActivity.this);
  
                List&lt;Address&gt; list = null;
                try {
                    list = gc.getFromLocation(lat, lng, 1);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                Address address = list.get(0);
  
                String sublocality = address.getSubLocality();
  
  
                // Setting the title for the marker.
                // This will be displayed on taping the marker
                markerOptions.title(sublocality);
  
                // Clears the previously touched position
                mMap.clear();
  
                // Animating to the touched position
                mMap.animateCamera(CameraUpdateFactory.newLatLng(point));
  
                // Placing a marker on the touched position
                mMap.addMarker(markerOptions);
  
            }
        });
  
  
    }
  
    private void enableMyLocation() {
  
  
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
            // Permission to access the location is missing.
            PermissionUtils.requestPermission(this, LOCATION_PERMISSION_REQUEST_CODE,
                    Manifest.permission.ACCESS_FINE_LOCATION, true);
        } else if (mMap != null) {
            // Access to the location has been granted to the app.
            mMap.setMyLocationEnabled(true);
        }
  
    }
  
    @Override
    public boolean onMyLocationButtonClick() {
        Toast.makeText(this, "MyLocation button clicked", Toast.LENGTH_SHORT).show();
        // Return false so that we don't consume the event and the default behavior still occurs
        // (the camera animates to the user's current position).
        return false;
    }
  
    @Override
    public void onMyLocationClick(@NonNull Location location) {
        Toast.makeText(this, "Current location:\n" + location, Toast.LENGTH_LONG).show();
    }
  
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                          @NonNull int[] grantResults) {
  
        if (requestCode != LOCATION_PERMISSION_REQUEST_CODE) {
            return;
        }
  
        if (PermissionUtils.isPermissionGranted(permissions, grantResults,
                Manifest.permission.ACCESS_FINE_LOCATION)) {
            // Enable the my location layer if the permission has been granted.
            enableMyLocation();
        } else {
            // Display the missing permission error dialog when the fragments resume.
            mPermissionDenied = true;
        }
    }
  
    @Override
    protected void onResumeFragments() {
        super.onResumeFragments();
        if (mPermissionDenied) {
            // Permission was not granted, display error dialog.
            showMissingPermissionError();
            mPermissionDenied = false;
        }
    }
  
    /**
    * Displays a dialog with error message explaining that the location permission is missing.
    */
    private void showMissingPermissionError() {
        PermissionUtils.PermissionDeniedDialog
                .newInstance(true).show(getSupportFragmentManager(), "dialog");
    }
  }
  </code></pre>