6

我使用Google Maps Android API v2與Android一起使用附近標記顯示當前位置。 使用Google Places API收到附近的地點位置和標題。谷歌地圖Android API v2,標記標題/摘錄錯誤顯示

的問題是,在標題/段非英語名稱的失敗方式顯示。 例如,希伯來人的名字。

附上sreenshot。

Screenshot

+0

這可能是地圖V2沒有適當的RTL支持。您是否遇到LTR語言的問題? – CommonsWare

+0

當然,我不是,交配。似乎這個問題只適用於國際化。 –

+0

再一次,我的理論一般不是國際化,而是RTL與LTR語言。適當的RTL支持在Android中是相對較新的,而Maps V2可能已經搞砸了。你可以使用'InfoWindowAdapter'來創建你自己的地圖氣球內容,在那裏你比RTL內置的東西做得更好。 – CommonsWare

回答

12

由於阿拉伯語和希伯來語是問題的根源,而英語和俄語都沒有,我會猜的東西是在默認的信息窗口實現破相對於從右到左(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

+1

我只補充一點在我的情況我應該做這一點,方式: \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} 作品美麗。最主要的祕密就是爲什麼谷歌錯過了這種方式:-) –

+0

@OlegPreobrazhenskyy,你能讓希伯來文工作嗎?我試圖用我自己的佈局使用GetInfoWindow,而英文看起來不錯,希伯來語TextView中沒有看到...任何幫助,將不勝感激 – Shushu

+0

@CommonsWare有沒有辦法設置utf8字符串? (Arabic Lang) –

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 bug報告:https://code.google.com/p/gmaps-api-issues/issues/detail?id=5608#makechanges

+0

「layoutDirection」可從API 17獲得。之前會發生什麼?另外,我認爲它只適用於爲textViews設置textDirection。 –

0

我注意到這個錯誤只發生在LinearLayout上(這很奇怪)。

嘗試RelativeLayout的替代,或者,如果你有API 17歲以上,設置textDirection每個TextViews的,它應該工作