在Google Map InfoWindow中自动链接TextViews

时间:2014-02-20 08:43:10

标签: android textview xamarin infowindow autolink

在Xamarin中,如何使用自动链接来处理Google Map InfoWindow中显示的一些TextView。

这是我的custom_info_window XML代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/Phone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:autoLink="phone"/>

    <TextView
        android:id="@+id/Web"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:autoLink="web"/>

</LinearLayout>

这是我的InfoWindow类:

public class InfoWindow : Java.Lang.Object, GoogleMap.IInfoWindowAdapter
{
    public View GetInfoContents(Marker p0)
    {
        var inflater = Application.Context.GetSystemService(Context.LayoutInflaterService) as LayoutInflater;

        View v = inflater.Inflate(Resource.Layout.custom_info_window, null);

        TextView title = (TextView) v.FindViewById(Resource.Id.Phone);
        title.Text = "Phone number: 0800 32 32 32";

        TextView description = (TextView) v.FindViewById(Resource.Id.Web);
        description.Text = "Email address: me@me.com";

        return v;
    }

    public View GetInfoWindow(Marker p0)
    {
        return null;
    }
}

当我点击Marker时,我会显示InfoWindow,并且它在InfoWindow类中被正确格式化为编码。

但是,当我点击任一自动链接项时,自动链接不起作用。单击InfoWindow只会注册整个InfoWindow单击,而不会分成两个不同的TextView。

我可以请一点帮忙吗?

提前致谢

3 个答案:

答案 0 :(得分:0)

你不能不使用一些肮脏的黑客。

InfoWindow不是实时视图,它只是从您提供的视图生成的图像。所以任何事件都不会被解雇。

但是,如果你真的需要这样做,这是最好的方法:Google Maps Android API v2 - Interactive InfoWindow (like in original android google maps) 我自己使用它,它很棒(我正在使用Xamarin)。

示例:

这是MapWrapper:http://pastebin.com/CDfxVZvi

这是适配器:http://pastebin.com/rHsjxxyn

这是Touch听众:http://pastebin.com/4kMTygfE

然后我创造了我需要的一切:http://pastebin.com/AGyRTnu4

它比Java更复杂,因为我们必须传递构造函数中的每个对象。不要忘记在地图容器中放置MapWrapper。

答案 1 :(得分:0)

由于一个简单的原因,你无法获得任何想要实现的帮助。您在InfoWindow中看到的不是您定义的布局,而是从中绘制的图像。意味着您尝试使用InfoWindow进行操作是不可能的。

来自Google的文档:

  

注意:绘制的信息窗口不是实时视图。视图在返回时呈现为图像(使用View.draw(Canvas))。这意味着对视图的任何后续更改都不会被地图上的信息窗口反映出来。要稍后更新信息窗口(例如,在加载图像后),请致电showInfoWindow()。此外,信息窗口将不会考虑正常视图(例如触摸或手势事件)的任何典型交互。但是,您可以在整个信息窗口中收听通用点击事件,如以下部分所述。

答案 2 :(得分:0)

在xml

中试试

机器人:linksClickable = “真”