AndroidでGoogle Maps Android API v2を使用して近くのマーカーで現在の位置を表示します。 近くの場所の場所とタイトルは、GoogleプレイスAPIを使用して受け取ります。GoogleマップAndroid API v2、マーカーのタイトル/スニペットが間違って表示される
タイトル/スニペットの英語以外の名前が正しく表示されないという問題があります。 インスタンスの場合、ヘブライ名。
スクリーンショットが添付されています。
)
AndroidでGoogle Maps Android API v2を使用して近くのマーカーで現在の位置を表示します。 近くの場所の場所とタイトルは、GoogleプレイスAPIを使用して受け取ります。GoogleマップAndroid API v2、マーカーのタイトル/スニペットが間違って表示される
タイトル/スニペットの英語以外の名前が正しく表示されないという問題があります。 インスタンスの場合、ヘブライ名。
スクリーンショットが添付されています。
)
アラビア語とヘブライ語は、問題を引き起こしていると、英語とロシア語はありませんが、私は何かが右から左(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);
}
}
、あなたはView
を返すgetInfoWindow()
だろう。 getInfoWindow()
がnull
を返した場合は、ウィンドウの内容としてgetInfoContents()
が使用されます。 GoogleMap
にInfoWindowAdapter
のインスタンスをsetInfoWindowAdapter()
で添付します。
独自のレイアウトを使用して、RTLを正しく実装していることを確認することができます。原則として、この問題を解決する必要があります。マップV2は、正常に動作するはずのRTLコードを壊すような不思議なことを行うことが考えられます。この場合、file an issueが必要です。
私は私の場合、私はこのような方法にする必要があることを追加します。 \t \t \t @Override \t \t \tパブリックビューgetInfoContents(マーカーマーカー) { \t \t \t \t Tex tView情報=新しい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))。 \t \t \t \t info.setText(marker.getTitle()+ "\ n" + marker.getSnippet()); \t \t \t \t info.setTextColor(ShareLocation.this.getResources()。getColor(R.color.black)); \t \t \t \t返品情報; \t \t \t} 美しいです。そして、主な秘密はなぜgoogleがこの方法を逃したかです: –
@OlegPreobrazhenskyy、あなたはヘブライ語を動かすことができますか?私は任意のヘルプは – Shushu
@CommonsWareをいただければ幸いです... GetInfoWindowを使用して独自のレイアウトをしようとしていますし、英語はOKに見えながら、TextViewの中にヘブライ語は全く見られないUTF8文字列を設定する方法はありますか? (アラビア語のラング) –
CommnsWareの答えについての詳細情報を追加:私はこの賞賛を書いていた瞬間のよう
は、マップ自体があなたのタイトルがRTLデスクトップ上に反転されないことを意味しlayout_direction="LTR"
ようです。解決策は単純です:私は、ロケールのレイアウト方向ではなく継承された方向を使用しています
<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
「layoutDirection」はAPI 17から入手できます。また、私はそれがtextViewsのtextDirectionを設定するときにのみ動作すると思います。 –
このバグはLinearLayout(これは非常に奇妙です)でのみ発生しています。
ではなく、RelativeLayoutを試してみてください、または、あなたがTextViewsごとにAPI 17以上、設定textDirectionを持っている場合、それは
それは地図V2が適切なRTLをサポートしていないのかもしれ動作するはずです。 LTR言語に問題がありますか? – CommonsWare
もちろん、私は仲間ではありません。この問題はi18nにのみ適用されると思われます。 –
私の理論は一般的にi18nではなく、RTLとLTRの言語です。適切なRTLサポートはAndroidで比較的新しいものであり、Maps V2はそれを混乱させるかもしれません。'InfoWindowAdapter'を使ってマップバルーンの独自のコンテンツを作成することができます。マップバルーンのコンテンツは、RTLの組み込みのものよりも優れています。 – CommonsWare