2013-05-13 9 views
18

To jest mój zwyczaj układ dla mojego okna informacyjnego:Jak umieścić rysowany jako tło w InfoWindow (Google Maps API v2 dla Androida)?

<RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/bg_infowindow" > 
    <LinearLayout 
      android:id="@+id/text_box" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" > 
     <TextView 
      style="@style/TexTitle" 
      android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    <TextView 
      style="@style/TextDistance" 
      android:id="@+id/distance" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 
</RelativeLayout> 

A to mój zwyczaj adapter:

public class MapInfoWindowAdapter implements InfoWindowAdapter{ 

    private LayoutInflater inflater; 
    private Context context; 

    public MapInfoWindowAdapter(Context context){ 
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     this.context = context; 
    } 

    @Override 
    public View getInfoContents(Marker marker) { 

     // Getting view from the layout file 
     View v = inflater.inflate(R.layout.map_popup, null); 

     TextView title = (TextView) v.findViewById(R.id.title); 
     title.setText(marker.getTitle()); 

     TextView address = (TextView) v.findViewById(R.id.distance); 
     address.setText(marker.getSnippet()); 

     return v; 
    } 

    @Override 
    public View getInfoWindow(Marker arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

} 

A ta jest wynikiem:

enter image description here

jednak Chcę, aby niestandardowy program do rysowania był jedynym tłem dla mojego okna informacyjnego, Jak to osiągnąć?

Odpowiedz

49

Wymień kody getInfoContents z getInfoWindow. Różnica między nimi to getInfoContents zawija Twój View w ViewGroup z domyślnym tłem.

@Override 
public View getInfoWindow(Marker marker) { 

    // Getting view from the layout file 
    View v = inflater.inflate(R.layout.map_popup, null); 

    TextView title = (TextView) v.findViewById(R.id.title); 
    title.setText(marker.getTitle()); 

    TextView address = (TextView) v.findViewById(R.id.distance); 
    address.setText(marker.getSnippet()); 

    return v; 
} 

@Override 
public View getInfoContents(Marker arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 
+2

Naprawdę doceniam swoją wyjaśniającą odpowiedź, ale byłem coraz NullPointerException przy użyciu RelativeLayout jako root w moim niestandardowy układ więc używam LinearLayout zamiast. – IsaacCisneros

+1

@IsaacCisneros To powinno być prawdopodobnie twoje pierwotne pytanie. Jest to znany problem. Zobacz: [problemy z interfejsem gmaps-api] (https://code.google.com/p/gmaps-api-issues/issues/detail?id=4748). –

+1

@ MaciejGórski naprawdę fajny kod .... –

0

spróbować ..

custom_infowindow.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 


<LinearLayout 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="#80000000" 
android:orientation="vertical"> 

<ImageView 
    android:src="@drawable/ic_launcher" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dp"/> 

</LinearLayout> 

</LinearLayout> 


googleMap.setInfoWindowAdapter(new InfoWindowAdapter() 
{ 

     public View getInfoWindow(Marker arg0) 
     { 
      View v = getLayoutInflater().inflate(R.layout.custom_infowindow, null); 
      return v; 
     } 

     public View getInfoContents(Marker arg0) 
     { 
      return null; 
     } 
    });