单击标记时清空InfoWindow

时间:2013-07-17 00:47:12

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

这是我将新标记添加到Google地图的代码:

MarkerOptions m = new MarkerOptions();
m.title(title);
m.snippet(snippet);
m.position(location);
mMap.addMarker(m);

mMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
        @Override
        public void onInfoWindowClick(Marker marker) {
            Toast.makeText(DemoActivity.this, "WindowClicked: "+ marker.getTitle() + ":" + marker.getSnippet(),
                    Toast.LENGTH_SHORT).show();
        }
    });

现在,当titlesnippet为英语时,此功能正常。 infoWindowToast按预期工作。

但是,在我的情况下,titlesnippet是阿拉伯语,Toast工作正常但 InfoWindow显示空窗口 < /强>

在我看来,这是一个与阿拉伯语有关的错误。有办法解决它吗?

3 个答案:

答案 0 :(得分:8)

@jimmithy的回答解决了我的问题。

这只是来自this project三步实施

第1步:创建infoWindow的布局。这是popup.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="wrap_content"
android:orientation="horizontal">

<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:padding="2dip"
android:src="@drawable/ic_launcher"
android:contentDescription="@string/icon"/>

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

<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:textStyle="bold"/>

<TextView
android:id="@+id/snippet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15sp"/>
</LinearLayout>

</LinearLayout>

第2步:创建InfoWindowAdapter的实现。这是PopupAdapter类:

class PopupAdapter implements InfoWindowAdapter {
  LayoutInflater inflater=null;

  PopupAdapter(LayoutInflater inflater) {
    this.inflater=inflater;
  }

  @Override
  public View getInfoWindow(Marker marker) {
    return(null);
  }

  @Override
  public View getInfoContents(Marker marker) {
    View popup=inflater.inflate(R.layout.popup, null);

    TextView tv=(TextView)popup.findViewById(R.id.title);

    tv.setText(marker.getTitle());
    tv=(TextView)popup.findViewById(R.id.snippet);
    tv.setText(marker.getSnippet());

    return(popup);
  }
}

第3步:在您的“活动”中,将适配器设置为GoogleMap:

mMap.setInfoWindowAdapter(new PopupAdapter(getLayoutInflater()));

你被定了!

答案 1 :(得分:7)

解决这个问题的方法是显示自定义信息窗口。您可以通过创建InfoWindowAdapter并使用GoogleMap.setInfoWindowAdapter()进行设置来完成此操作。

  

要替换默认信息窗口,请使用自定义渲染覆盖getInfoWindow(Marker),并为getInfoContents(Marker)返回null。要仅替换默认信息窗口框架内的信息窗口内容(标注气泡),请在getInfoWindow(Marker)中返回null并改为覆盖getInfoContents(Marker)。

更多信息:https://developers.google.com/maps/documentation/android/marker#info_windows

答案 2 :(得分:3)

您应该使用此命令.title("\u200e"+"عربی").