¿Cómo agregar SearchView en Google Maps en Android?

Hemos visto la implementación de Google Maps en Android junto con marcadores en él. Pero muchas aplicaciones brindan funciones para que los usuarios puedan especificar la ubicación en la que deben colocar marcadores. Entonces, en este artículo, implementaremos un SearchView en nuestra aplicación de Android para que podamos buscar el nombre de una ubicación y agregar un marcador a esa ubicación. 

¿Qué vamos a construir en este artículo? 

Construiremos una aplicación simple en la que mostraremos un mapa de Google simple y un SearchView . Dentro de esa vista de búsqueda, cuando los usuarios ingresen cualquier nombre de ubicación, agregaremos un marcador a esa ubicación en Google Maps. qué

Implementación paso a paso

Paso 1: Crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación. Asegúrese de seleccionar Actividad de mapas al crear un nuevo proyecto.

Paso 2: generar una clave API para usar Google Maps

Para generar la clave API para Maps, puede consultar Cómo generar la clave API para usar Google Maps en Android . Después de generar su clave API para Google Maps. Tenemos que añadir esta clave a nuestro Proyecto. Para agregar esta clave en nuestra aplicación, navegue a la carpeta de valores> archivo google_maps_api.xml y en la línea 23 debe agregar su clave API en lugar de YOUR_API_KEY

Paso 3: trabajar con el archivo activity_maps.xml

Como estamos agregando SearchView a nuestro Google Maps para buscar una ubicación y agregar un marcador en esa ubicación. Así que tenemos que agregar una vista de búsqueda a nuestro archivo activity_maps.xml . Para agregar SearchView, vaya a la aplicación > res > diseño > activity_maps.xml y agréguele el siguiente código. Se agregan comentarios en el código para conocer con más detalle. 

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
  
    <!--fragment to display our maps-->
    <fragment xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MapsActivity" />
  
    <!--search view to search our location-->
    <androidx.appcompat.widget.SearchView
        android:id="@+id/idSearchView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="#BFBFBF"
        android:elevation="5dp"
        app:iconifiedByDefault="false"
        app:queryHint="Search Here" />
  
</RelativeLayout>

Paso 4: trabajar con el archivo MapsActivity.java

Vaya al archivo MapsActivity.java y consulte el siguiente código. A continuación se muestra el código del archivo MapsActivity.java . Se agregan comentarios dentro del código para comprender el código con más detalle.

Java

import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
  
import androidx.appcompat.widget.SearchView;
import androidx.fragment.app.FragmentActivity;
  
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
  
import java.io.IOException;
import java.util.List;
  
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
  
    private GoogleMap mMap;
      
    // creating a variable 
    // for search view.
    SearchView searchView;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
          
        // initializing our search view.
        searchView = findViewById(R.id.idSearchView);
          
        // Obtain the SupportMapFragment and get notified 
        // when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
          
        // adding on query listener for our search view.
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                // on below line we are getting the 
                // location name from search view.
                String location = searchView.getQuery().toString();
                  
                // below line is to create a list of address
                // where we will store the list of all address.
                List<Address> addressList = null;
                  
                // checking if the entered location is null or not.
                if (location != null || location.equals("")) {
                    // on below line we are creating and initializing a geo coder.
                    Geocoder geocoder = new Geocoder(MapsActivity.this);
                    try {
                        // on below line we are getting location from the 
                        // location name and adding that location to address list.
                        addressList = geocoder.getFromLocationName(location, 1);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    // on below line we are getting the location 
                    // from our list a first position.
                    Address address = addressList.get(0);
                      
                    // on below line we are creating a variable for our location
                    // where we will add our locations latitude and longitude.
                    LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude());
                      
                    // on below line we are adding marker to that position.
                    mMap.addMarker(new MarkerOptions().position(latLng).title(location));
                      
                    // below line is to animate camera to that position.
                    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));
                }
                return false;
            }
  
            @Override
            public boolean onQueryTextChange(String newText) {
                return false;
            }
        });
        // at last we calling our map fragment to update.
        mapFragment.getMapAsync(this);
    }
      
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
    }
}

Ahora ejecute su aplicación y vea el resultado de la aplicación. 

Producción:

Publicación traducida automáticamente

Artículo escrito por chaitanyamunje y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *