6

Io uso Google Maps Android API v2 con Android per mostrare la posizione corrente con i marker vicini. I luoghi nelle vicinanze e i titoli vengono ricevuti utilizzando l'API di Google Places.API Android di Google Maps v2, titolo errato del marcatore/snippet display

Il problema è che i nomi non inglesi di titolo/snippet vengono visualizzati in modo non corretto. Per l'istanza, nomi ebraici.

Il sreenhot è allegato.

Screenshot)

+0

Può essere che Maps V2 non ha un adeguato supporto RTL. Incontri problemi con i linguaggi di LTR? – CommonsWare

+0

Certo che non lo sono, amico. Sembra che il problema si applichi solo a i18n. –

+0

Ancora una volta, la mia teoria non è i18n in generale, ma RTL rispetto ai linguaggi LTR. Il corretto supporto RTL è relativamente nuovo in Android e Maps V2 potrebbe averlo incasinato.È possibile utilizzare un 'InfoWindowAdapter' per creare i propri contenuti del fumetto della mappa, dove si fa un lavoro migliore rispetto agli elementi incorporati con RTL. – CommonsWare

risposta

12

Poiché l'arabo e l'ebraico stanno causando problemi, e l'inglese e il russo non lo sono, sto andando a indovinare che qualcosa è rotto nella realizzazione finestra di informazioni di default rispetto alla destra a sinistra (RTL) le lingue. In particolare se esegui i test su Android 4.2, è possibile che i contenuti della finestra di informazioni predefinite di Maps V2 abbiano applicato in modo non corretto i vari attributi correlati a RTL.

Fortunatamente, è possibile fornire i propri contenuti informazioni della finestra, mediante l'attuazione di InfoWindowAdapter e avendo getInfoContents() restituire il View che si desidera utilizzare nella finestra di informazioni.

Per esempio, this sample project (da aggiornamento di domani per il mio libro) mostra la personalizzazione della finestra di informazioni utilizza questo 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); 
    } 
} 

Se si desidera sostituire l'intera finestra, si sarebbe getInfoWindow() restituire un View. Se getInfoWindow() restituisce null, getInfoContents() viene utilizzato per i contenuti della finestra. Quindi alleghi un'istanza di InfoWindowAdapter tramite setInfoWindowAdapter() al numero GoogleMap.

Nel tuo caso, puoi utilizzare il tuo layout per assicurarti di implementare correttamente RTL. Ciò dovrebbe, in linea di principio, chiarire questo problema. È ipotizzabile che Maps V2 faccia qualcosa di strano che rompa il codice RTL che normalmente dovrebbe funzionare, nel qual caso avresti bisogno di file an issue.

+1

ho solo aggiungere che nel mio caso dovrei fare questo quel modo: \t \t \t @Override \t \t \t pubblica Vista getInfoContents (marker Marker) { \t \t \t \t Tex tView info = new TextView (ShareLocation.this); \t \t \t \t info.setLayoutParams (nuove 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 informazioni di ritorno; \t \t \t} Opere bellissime. E il segreto principale è il motivo per cui Google si è perso in questo modo :-) –

+0

@OlegPreobrazhenskyy, dove è possibile fare funzionare l'ebraico? Sto provando con il mio layout utilizzando GetInfoWindow, e mentre l'inglese sembra ok, l'ebraico in TextView non è visto affatto ... Qualsiasi aiuto sarebbe apprezzato – Shushu

+0

@CommonsWare c'è un modo per impostare una stringa utf8? (Arabic Lang) –

0

L'aggiunta di più informazioni per quanto riguarda CommnsWare risposta:

Come del momento sto scrivendo questo Commend, sembra che la mappa stessa è layout_direction="LTR" il che significa che i titoli non saranno capovolte sui desktop RTL. La soluzione è semplice:

<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> 

Nota che sto usando la direzione di layout del locale e non la direzione ereditato. Ho commentato questo sul bug report corrispondente di Google qui: https://code.google.com/p/gmaps-api-issues/issues/detail?id=5608#makechanges

+0

"layoutDirection" è disponibile dall'API 17. Cosa succederebbe prima? Inoltre, penso che funzioni solo quando si imposta textDirection per textViews. –

0

Ho notato che questo errore si verifica solo su LinearLayout (che è molto strano).

Prova RelativeLayout, invece, o, se si dispone di API 17 e al di sopra, impostare textDirection per ciascuna delle TextViews, e dovrebbe funzionare