我使用带有 Android 的 Google Maps Android API v2 来显示带有附近标记的当前位置。使用 Google Places API 接收附近地点的位置和标题。
问题是标题/片段中的非英语名称以失败方式显示。例如,希伯来名字。
附上截图。
)
我使用带有 Android 的 Google Maps Android API v2 来显示带有附近标记的当前位置。使用 Google Places API 接收附近地点的位置和标题。
问题是标题/片段中的非英语名称以失败方式显示。例如,希伯来名字。
附上截图。
)
由于阿拉伯语和希伯来语引起了问题,而英语和俄语则没有,我猜想在从右到左 (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);
}
}
如果要替换整个窗口,则必须getInfoWindow()
返回一个View
. 如果getInfoWindow()
返回null
,getInfoContents()
则用于窗口的内容。InfoWindowAdapter
然后,您将via的实例附加setInfoWindowAdapter()
到您的GoogleMap
.
在您的情况下,您可以使用自己的布局来确保正确实施 RTL。原则上,这应该可以解决这个问题。可以想象,Maps V2 做了一些奇怪的事情,破坏了通常应该工作的 RTL 代码,在这种情况下,您需要提交问题。
添加有关 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
我注意到这个错误只发生在 LinearLayout 上(这很奇怪)。
请尝试使用 RelativeLayout,或者,如果您有 API 17 及更高版本,请为每个 TextView 设置 textDirection,它应该可以工作