layout_width对自定义信息窗口没有影响

时间:2014-01-02 14:25:29

标签: android google-maps google-maps-android-api-2

我正在尝试在地图上自定义标记的信息窗口。我创建了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时,它没有任何效果。我做错了什么?

1 个答案:

答案 0 :(得分:2)

RelativeLayout在知道其父容器时效果最佳。例如,在getView()的{​​{1}}中,最好使用以父Adapter作为第二个参数的三参数inflate()方法。在您的情况下,这是不可能的,这就是您将ViewGroup作为第二个参数传递给null的原因。

我会尝试切换到其他一些根容器类。或者,尝试将inflate()包裹在一个无意义的RelativeLayout中,看看是否有帮助。