9

这是我将新标记添加到我的 GoogleMap 的代码:

MarkerOptions m = new MarkerOptions();
m.title(title);
m.snippet(snippet);
m.position(location);
mMap.addMarker(m);

mMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
        @Override
        public void onInfoWindowClick(Marker marker) {
            Toast.makeText(DemoActivity.this, "WindowClicked: "+ marker.getTitle() + ":" + marker.getSnippet(),
                    Toast.LENGTH_SHORT).show();
        }
    });

title现在,当我的和snippet使用英语时,这工作得很好。infoWindowToast预期的工作。

但是,就我而言,title并且snippet是阿拉伯语,Toast工作正常,但InfoWindow 显示 empty window

在我看来,这就像一个与阿拉伯语有关的错误。有没有办法解决它?

4

3 回答 3

8

@jimmithy 的回答解决了我的问题。

这只是这个项目三步实现

第 1 步:创建 infoWindow 的布局。这是popup.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:padding="2dip"
android:src="@drawable/ic_launcher"
android:contentDescription="@string/icon"/>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:textStyle="bold"/>

<TextView
android:id="@+id/snippet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15sp"/>
</LinearLayout>

</LinearLayout>

第 2 步:创建 InfoWindowAdapter 的实现。这里是PopupAdapter类:

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);
  }
}

第 3 步:在您的 Activity 中,将您的适配器设置为 GoogleMap:

mMap.setInfoWindowAdapter(new PopupAdapter(getLayoutInflater()));

你已经准备好了!

于 2013-08-01T05:21:26.743 回答
7

解决此问题的一种方法是显示自定义信息窗口。您可以通过创建InfoWindowAdapter并使用GoogleMap.setInfoWindowAdapter()对其进行设置来做到这一点。

要替换默认信息窗口,请使用您的自定义渲染覆盖 getInfoWindow(Marker),并为 getInfoContents(Marker) 返回 null。要仅替换默认信息窗口框架(标注气泡)内的信息窗口内容,请在 getInfoWindow(Marker) 中返回 null 并改写 getInfoContents(Marker)。

更多信息:https ://developers.google.com/maps/documentation/android/marker#info_windows

于 2013-07-17T02:14:09.377 回答
3

你应该使用这个命令.title("\u200e"+"عربی").

于 2015-01-24T15:38:32.257 回答