如何在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; } } 

这就是结果:

在这里输入图像说明

不过,我想要自定义绘制作为我的信息窗口的唯一背景,如何实现这一目标?

Solutions Collecting From Web of "如何在InfoWindow(适用于Android的Google Maps API v2)上将drawable作为背景?"

getInfoContentsreplacegetInfoContents代码。 他们之间的区别是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; } 

尝试这个..

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