custom info window adapter with custom data in map v2 custom info window adapter with custom data in map v2 android android

custom info window adapter with custom data in map v2


Try this

windowlayout.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:orientation="vertical">    <TextView        android:id="@+id/tv_lat"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <TextView        android:id="@+id/tv_lng"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>

MainActivity.java

public class MainActivity extends FragmentActivity {GoogleMap googleMap;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    // Getting reference to the SupportMapFragment of activity_main.xml    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);    // Getting GoogleMap object from the fragment    googleMap = mapFragment.getMap();    // Setting a custom info window adapter for the google map    googleMap.setInfoWindowAdapter(new InfoWindowAdapter() {        // Use default InfoWindow frame        @Override        public View getInfoWindow(Marker arg0) {            return null;        }        // Defines the contents of the InfoWindow        @Override        public View getInfoContents(Marker arg0) {            // Getting view from the layout file info_window_layout            View v = getLayoutInflater().inflate(R.layout.windowlayout, null);            // Getting the position from the marker            LatLng latLng = arg0.getPosition();            // Getting reference to the TextView to set latitude            TextView tvLat = (TextView) v.findViewById(R.id.tv_lat);            // Getting reference to the TextView to set longitude            TextView tvLng = (TextView) v.findViewById(R.id.tv_lng);            // Setting the latitude            tvLat.setText("Latitude:" + latLng.latitude);            // Setting the longitude            tvLng.setText("Longitude:"+ latLng.longitude);            // Returning the view containing InfoWindow contents            return v;        }    });    // Adding and showing marker while touching the GoogleMap    googleMap.setOnMapClickListener(new OnMapClickListener() {        @Override        public void onMapClick(LatLng arg0) {            // Clears any existing markers from the GoogleMap            googleMap.clear();            // Creating an instance of MarkerOptions to set position            MarkerOptions markerOptions = new MarkerOptions();            // Setting position on the MarkerOptions            markerOptions.position(arg0);            // Animating to the currently touched position            googleMap.animateCamera(CameraUpdateFactory.newLatLng(arg0));            // Adding marker on the GoogleMap            Marker marker = googleMap.addMarker(markerOptions);            // Showing InfoWindow on the GoogleMap            marker.showInfoWindow();        }    });}}

In this way you can create custom Layout and achieve the way you want to do.

Let me know if it helps you.


I have open dialog onMarker() click. and setContentView(my layout).

I have use below code.

@Override    public boolean onMarkerClick(Marker arg0) {        if(arg0.getSnippet() == null){            mMap.moveCamera(CameraUpdateFactory.zoomIn());            return true;        }        //arg0.showInfoWindow();        final DataClass data = myMapData.get(arg0);        final Dialog d = new Dialog(MainActivity.this);        d.requestWindowFeature(Window.FEATURE_NO_TITLE);        //d.setTitle("Select");        d.getWindow().setBackgroundDrawable(new ColorDrawable(Color.WHITE));        d.setContentView(R.layout.info_content);        ivPhoto = (ImageView)d.findViewById(R.id.infocontent_iv_image);        AddImageOnWindow executeDownload = new AddImageOnWindow();        final LatLng l = arg0.getPosition();        executeDownload.execute(l);        TextView tvName = (TextView)d.findViewById(R.id.infocontent_tv_name);        tvName.setText(data.getPlaceName());        TextView tvType = (TextView)d.findViewById(R.id.infocontent_tv_type);        tvType.setText("("+data.getPlaceType()+")");        TextView tvDesc = (TextView)d.findViewById(R.id.infocontent_tv_desc);        tvDesc.setText(data.getPlaceDesc());        TextView tvAddr = (TextView)d.findViewById(R.id.infocontent_tv_addr);        tvAddr.setText(Html.fromHtml(data.getPlaceAddr()));d.show();return true;