我正在尝试在地图上自定义标记的信息窗口。我创建了infowindowlayout.xml,如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dip" >
<TextView
android:id="@+id/placeName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:gravity="left" />
<TextView
android:id="@+id/vicinity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/placeName"
android:layout_alignParentLeft="true"
android:gravity="left"
android:layout_marginTop="1dip" />
<TextView
android:id="@+id/distance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="5dip"
android:layout_alignTop="@id/placeName"
android:gravity="right" />
</RelativeLayout>
我的InfoViewAdapter实现如下所示:
@Override
public View getInfoContents(Marker marker) {
if(contentView == null)
contentView = inflater.inflate(R.layout.infowindowlayout, null);
TextView placeNameView = (TextView)contentView.findViewById(R.id.placeName); // Place
TextView vicinityView = (TextView)contentView.findViewById(R.id.vicinity); // Vicinity
TextView distanceView = (TextView)contentView.findViewById(R.id.distance); // Distance
Place place = markerMap.get(marker.getId());
// Setting all values in listview
placeNameView.setText(place.getName());
vicinityView.setText(place.getVicinity());
distanceView.setText(place.getDistance());
return contentView;
}
@Override
public View getInfoWindow(Marker marker) {
return null;
}
正如你所看到的,我到处都有“wrap_content”。但是,当我单击标记时,信息窗口显示的范围比必要的宽。当我在XML中更改RelativeLayout的layout_width时,它没有任何效果。我做错了什么?
答案 0 :(得分:2)
RelativeLayout
在知道其父容器时效果最佳。例如,在getView()
的{{1}}中,最好使用以父Adapter
作为第二个参数的三参数inflate()
方法。在您的情况下,这是不可能的,这就是您将ViewGroup
作为第二个参数传递给null
的原因。
我会尝试切换到其他一些根容器类。或者,尝试将inflate()
包裹在一个无意义的RelativeLayout
中,看看是否有帮助。