单击标记时显示空InfoWindow

这是我的代码添加新的标记到我的谷歌地图:

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显示空窗口

在我看来,就像一个阿拉伯语相关的错误。 有没有办法解决它?

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

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

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

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

这只是这个项目 的三步实施

第1步 :创build您的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步:创buildInfoWindowAdapter的实现。 这里是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())); 

你已经定了!

你应该使用这个命令.title("\u200e"+"عربی").