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