45

I want to make custom info window adapter in map v2 in android as like below.

enter image description here

I have seen below link but doesn't get more.

1,2, 3,

below is my content layout file.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical" 
>
 <ImageView
 android:id="@+id/infocontent_iv_image"
 android:layout_width="150dp"
 android:layout_height="150dp"
 android:layout_alignParentTop="true" 
 />
 <RelativeLayout
 android:id="@+id/infocontent_rl_middle"
 android:layout_below="@id/infocontent_iv_image"
 android:layout_width="match_parent"
 android:layout_height="wrap_content" 
 android:layout_margin="5dp"
 >
 </RelativeLayout>
 <TextView
 android:id="@+id/infocontent_tv_name"
 android:layout_below="@id/infocontent_rl_middle"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:textStyle="bold" 
 android:layout_margin="5dp"
 />
 <TextView
 android:id="@+id/infocontent_tv_type"
 android:layout_below="@id/infocontent_tv_name"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:textColor="#CCCCCC"
 android:layout_margin="5dp"
 />
 <TextView
 android:id="@+id/infocontent_tv_desc"
 android:layout_below="@id/infocontent_tv_type"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_margin="5dp"
 />
 <TextView
 android:id="@+id/infocontent_tv_addr"
 android:layout_below="@id/infocontent_tv_desc"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_margin="5dp"
 />
</RelativeLayout>

So any one help me how can i set data to all views in infowindow adapter?

asked Feb 26, 2013 at 13:19
2
  • just dialog.dismiss on x button click and also it close on device back button. Commented May 16, 2013 at 7:46
  • Hi Girish! I too want to do in the same way as you did. Is it possible your answer little explanatory or any reference. ?? Commented Sep 17, 2013 at 12:41

2 Answers 2

73

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;
@Override
protected 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.

answered Feb 26, 2013 at 14:09
Sign up to request clarification or add additional context in comments.

17 Comments

I have add my layout file of infowindow adapter. So can you help me how can i set data to all views?
What do you mean by all views?? View will be one,data will be different??
ya but I have 4 textview and one imageview so can i set value to all.
Just need to apply the logic. Take a loop and add markers along with the position and same way to show the contents
|
22

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;
answered Mar 19, 2013 at 9:55

8 Comments

Could you elaborate your answer a little please?
I have not open bubble. I have open dialog on marker click event and put buttons in dialog.
@GirishBhutiya how do you make the dialog to point to top of the marker? (instead of pop up arbitrarily), tks.
@GirishBhutiya is this Dialog exactly point to the marker position like InfoWindow?
I like this solution better, because offers total control over appearance. Also, you can add buttons and other controls. I don't think screen position is so important: the dialog will cover most of the screen, anyway, and the user knows where he tapped.
|

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.