Google Maps Android API v2,Marker title/snippet显示错误

Ole*_*koz 7 android google-maps internationalization google-places-api

我在Android上使用Google Maps Android API v2来显示附近标记的当前位置.使用Google Places API接收附近的地点位置和标题.

问题是title/snippet上的非英文名称以失败的方式显示.例如,希伯来名字.

附带了sreenshot.

截图)

Com*_*are 13

由于阿拉伯语和希伯来语都会导致问题,而英语和俄语都没有,我猜测默认信息窗口实现中有关于从右到左(RTL)语言的问题.特别是如果您在Android 4.2上运行测试,可能是Maps V2的默认信息窗口内容错误地应用了各种与RTL相关的属性.

幸运的是,您可以通过实现InfoWindowAdapter并在信息窗口中getInfoContents()返回View要使用的内容来提供自己的信息窗口内容.

例如,这个示例项目(从明天的更新到我的书)显示使用以下方法自定义信息窗口InfoWindowAdapter:

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

如果你想要替换整个窗口,你将getInfoWindow()返回一个View.如果getInfoWindow()返回null,getInfoContents()则用于窗口的内容.然后,附加的一个实例InfoWindowAdapter通过setInfoWindowAdapter()你的GoogleMap.

在您的情况下,您可以使用自己的布局来确保正确实现RTL.原则上,这应该解决这个问题.可以想象,Maps V2做了一些奇怪的事情,破坏了通常应该工作的RTL代码,在这种情况下你需要提出问题.