我使用Google Maps Android API v2與Android一起使用附近標記顯示當前位置。 使用Google Places API收到附近的地點位置和標題。谷歌地圖Android API v2,標記標題/摘錄錯誤顯示
的問題是,在標題/段非英語名稱的失敗方式顯示。 例如,希伯來人的名字。
附上sreenshot。
)
我使用Google Maps Android API v2與Android一起使用附近標記顯示當前位置。 使用Google Places API收到附近的地點位置和標題。谷歌地圖Android API v2,標記標題/摘錄錯誤顯示
的問題是,在標題/段非英語名稱的失敗方式顯示。 例如,希伯來人的名字。
附上sreenshot。
)
由於阿拉伯語和希伯來語是問題的根源,而英語和俄語都沒有,我會猜的東西是在默認的信息窗口實現破相對於從右到左(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()
用於窗口的內容。然後,您在GoogleMap
上通過setInfoWindowAdapter()
附上InfoWindowAdapter
的實例。
就你而言,你可以使用你自己的佈局來確保你正在實現RTL。原則上應該清除這個問題。可以想象,Maps V2會做一些奇怪的事情,打破通常應該起作用的RTL代碼,在這種情況下,您需要file an issue。
我只補充一點在我的情況我應該做這一點,方式: \t \t \t @覆蓋 \t \t \t公共查看getInfoContents(標記標記) { \t \t \t \t Tex tView info = new TextView(ShareLocation.this); \t \t \t \t info.setLayoutParams(新FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, \t \t \t \t \t \t FrameLayout.LayoutParams.MATCH_PARENT)); (marker.getTitle()+「\ n」+ marker.getSnippet());}};} \t \t \t \t info.setTextColor(ShareLocation.this.getResources()。getColor(R.color.black)); \t \t \t \t return info; \t \t \t} 作品美麗。最主要的祕密就是爲什麼谷歌錯過了這種方式:-) –
@OlegPreobrazhenskyy,你能讓希伯來文工作嗎?我試圖用我自己的佈局使用GetInfoWindow,而英文看起來不錯,希伯來語TextView中沒有看到...任何幫助,將不勝感激 – Shushu
@CommonsWare有沒有辦法設置utf8字符串? (Arabic Lang) –
添加關於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 bug報告:https://code.google.com/p/gmaps-api-issues/issues/detail?id=5608#makechanges
「layoutDirection」可從API 17獲得。之前會發生什麼?另外,我認爲它只適用於爲textViews設置textDirection。 –
我注意到這個錯誤只發生在LinearLayout上(這很奇怪)。
嘗試RelativeLayout的替代,或者,如果你有API 17歲以上,設置textDirection每個TextViews的,它應該工作
這可能是地圖V2沒有適當的RTL支持。您是否遇到LTR語言的問題? – CommonsWare
當然,我不是,交配。似乎這個問題只適用於國際化。 –
再一次,我的理論一般不是國際化,而是RTL與LTR語言。適當的RTL支持在Android中是相對較新的,而Maps V2可能已經搞砸了。你可以使用'InfoWindowAdapter'來創建你自己的地圖氣球內容,在那裏你比RTL內置的東西做得更好。 – CommonsWare