2013-05-13 13 views
18

これは私の情報ウィンドウのための私のカスタムレイアウトです:InfoWindow(Android用Google Maps API v2)でdrawableをバックグラウンドにする方法は?

<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> 

そして、これは私のカスタムアダプタです:

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; 
    } 

} 

そして、これが結果です:

enter image description here

しかし、私は、私の情報ウィンドウの唯一の背景として、カスタムdrawableを、どのようにこれを達成するためにしたいですか?

答えて

49

getInfoWindowgetInfoContentsでコードを交換してください。それらの違いはgetInfoContentsで、をViewGroupにデフォルトの背景でラップします。

@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

私はあなたの明確な答えに感謝します。しかし、私はカスタムレイアウトでRelativeLayoutをルートとして使用してNullPointerExceptionを取得していましたので、代わりにLinearLayoutを使用しています。 – IsaacCisneros

+1

@IsaacCisnerosこれはおそらくあなたの元の質問であるはずです。これは既知の問題です。これを見てください:[gmaps-api-issues](https://code.google.com/p/gmaps-api-issues/issues/detail?id=4748)。 –

+1

@MaciejGórski本当にいいコード.... –

0

はこれを試してください。..

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; 
     } 
    }); 
関連する問題