Android custom info window on map marker clicks
The following demonstrates how to make a custom layout for the info window popup when the marker on the Google map is clicked in Android.
activity_maps.xml, the layout for the main map activity.
map_marker_info_window.xml, the layout for the custom info window which will shown when the marker is clicked.
MarkerInfoWindowAdapter.java, the adapter for the custom info window when the marker is clicked.
public class MarkerInfoWindowAdapter implements GoogleMap.InfoWindowAdapter { private Context context; public MarkerInfoWindowAdapter(Context context) { this.context = context.getApplicationContext(); } @Override public View getInfoWindow(Marker arg0) { return null; } @Override public View getInfoContents(Marker arg0) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflater.inflate(R.layout.map_marker_info_window, null); LatLng latLng = arg0.getPosition(); TextView tvLat = (TextView) v.findViewById(R.id.tv_lat); TextView tvLng = (TextView) v.findViewById(R.id.tv_lng); tvLat.setText("Latitude:" + latLng.latitude); tvLng.setText("Longitude:"+ latLng.longitude); return v; } }
MapsActivity.java, the main activity that contains the map view. The base code is generated by Android Studio which took care some of the configuration settings in the Manifest and gradle file.
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { private GoogleMap mMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); } /** * Manipulates the map once available. * This callback is triggered when the map is ready to be used. * This is where we can add markers or lines, add listeners or move the camera. In this case, * we just add a marker near Sydney, Australia. * If Google Play services is not installed on the device, the user will be prompted to install * it inside the SupportMapFragment. This method will only be triggered once the user has * installed Google Play services and returned to the app. */ @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; // Add a marker in Sydney and move the camera LatLng sydney = new LatLng(-34, 151); mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 15)); // Setting a custom info window adapter for the google map MarkerInfoWindowAdapter markerInfoWindowAdapter = new MarkerInfoWindowAdapter(getApplicationContext()); googleMap.setInfoWindowAdapter(markerInfoWindowAdapter); // Adding and showing marker when the map is touched googleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() { @Override public void onMapClick(LatLng arg0) { mMap.clear(); MarkerOptions markerOptions = new MarkerOptions(); markerOptions.position(arg0); mMap.animateCamera(CameraUpdateFactory.newLatLng(arg0)); Marker marker = mMap.addMarker(markerOptions); marker.showInfoWindow(); } }); } }
Search within Codexpedia
Custom Search
Search the entire web
Custom Search
Related Posts