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

时间:2013-01-02 12:18:33

标签: android google-maps internationalization google-places-api

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

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

贴上了一些照片。

Screenshot

3 个答案:

答案 0 :(得分:13)

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

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

例如,this sample project(从明天的更新到我的书)显示使用此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);
  }
}

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

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

答案 1 :(得分:0)

添加有关CommnsWare答案的更多信息:

到目前为止,我正在撰写此评论,似乎地图本身为layout_direction="LTR",这意味着您的标题不会在RTL桌面上翻转。解决方案很简单:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layoutDirection="locale"
>
    ....
</RelativeLayout>

请注意,我使用的是区域设置的布局方向,而不是继承的方向。我在此处对相应的Google错误报告进行了评论:https://code.google.com/p/gmaps-api-issues/issues/detail?id=5608#makechanges

答案 2 :(得分:0)

我注意到这个错误只发生在LinearLayout上(这很奇怪)。

尝试使用RelativeLayout,或者,如果您有API 17及更高版本,请为每个TextView设置textDirection,它应该可以正常工作