7

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

问题是标题/片段中的非英语名称以失败方式显示。例如,希伯来名字。

附上截图。

截屏)

4

3 回答 3

13

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

幸运的是,您可以提供自己的信息窗口内容,方法是实现InfoWindowAdaptergetInfoContents()返回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);
  }
}

如果要替换整个窗口,则必须getInfoWindow()返回一个View. 如果getInfoWindow()返回nullgetInfoContents()则用于窗口的内容。InfoWindowAdapter然后,您将via的实例附加setInfoWindowAdapter()到您的GoogleMap.

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

于 2013-01-02T15:00:23.947 回答
2

添加有关 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

于 2014-10-26T13:02:23.993 回答
0

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

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

于 2015-12-03T13:21:12.940 回答