Android custom InfoWindow Google Map v2 onclick button?

15,610

Solution 1

Quoting the documentation:

Note: The info window that is drawn is not a live view. The view is rendered as an image (using View.draw(Canvas)) at the time it is returned. This means that any subsequent changes to the view will not be reflected by the info window on the map. To update the info window later (for example, after an image has loaded), call showInfoWindow(). Furthermore, the info window will not respect any of the interactivity typical for a normal view such as touch or gesture events. However you can listen to a generic click event on the whole info window as described in the section below.

Hence, you cannot find out when somebody taps on a Button in your info window. You are welcome to respond to clicks anywhere on the info window, though.

Solution 2

Someone wrote a library to address this problem

https://github.com/Appolica/InteractiveInfoWindowAndroid

InteractiveInfoWindowAndroid is an Android library which gives you the opportunity to show interactive info windows on your google map. The UI of your window is encapsulated in your own fragment with its own lifecycle. You just pass it to the InfoWindowManager and display it above whichever marker you want.

Share:
15,610
Sajith Vijesekara
Author by

Sajith Vijesekara

Contact me Linkedin

Updated on June 13, 2022

Comments

  • Sajith Vijesekara
    Sajith Vijesekara almost 2 years

    Hi i want to add marker info-window to my Google map in android application.So far i have add custom info window and it has Image and button.My target after click the marker then show the info-window and then after user click the button in window dismiss the info-window and do some activity after click the button.But i cant identify when user click button in marker info-window.This is my code. Plz tell me where is the wrong in my code.

    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) {
    
    
    
                        final View infoview = getLayoutInflater().inflate(R.layout.info_window,
                                null);
    
                        LatLng latLng = arg0.getPosition();                 
    
                        //tvLat.setText("Latitude:" + latLng.latitude);
    
                        //tvLng.setText("Longitude:" + latLng.longitude);
    
                         Button pickMe = (Button)infoview.findViewById(R.id.pickme);
                         pickMe.setOnClickListener(new Button.OnClickListener(){
    
                                @Override
                                public void onClick(View v) {
                                    // TODO Auto-generated method stub
                                    Toast.makeText(getApplicationContext(), "Requested Send", Toast.LENGTH_SHORT).show();
    
                                }});
    
    
                        //String reverceGeoCode=new GetLocationAddress().getAddress(String.valueOf(latLng.latitude), String.valueOf(latLng.longitude));
                        //Toast.makeText(getApplicationContext(), "Rev :"+reverceGeoCode, Toast.LENGTH_LONG).show();
    
                        return infoview;
    
                    }
                });
    

    And This is my customInfo-window xml file

        <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"   
         >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Sajith Vijesekara"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    
        <LinearLayout 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
             android:orientation="horizontal"
             android:layout_marginLeft="5dp"
             android:layout_marginTop="5dp"
             android:layout_marginBottom="5dp">
             <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight=".25"
            android:src="@drawable/driver" />
    
        <Button
            android:id="@+id/pickme"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight=".25"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginTop="10dp"
            android:text="Pick Me" />
    
        </LinearLayout>   
    
    </LinearLayout>
    

    Thanks Sajith