在Xamarin中,如何让自动链接与Google地图信息窗口中显示的一些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>
这是我的信息窗口类:
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;
}
}
当我单击标记时,我显示 InfoWindow,并且它的格式正确,如 InfoWindow 类中的编码。
但是,当我单击任何一个自动链接项目时,自动链接不起作用。对信息窗口的单击仅注册为整个信息窗口单击,而不会分离到两个不同的文本视图中。
我可以得到一些帮助吗?
提前致谢
一个简单的原因,您无法获得任何想要实现的帮助。 您在InfoWindow
中看到的不是您定义的布局,而是从中绘制的图像。 这意味着您尝试对InfoWindow
执行的操作是不可能的。
来自谷歌的文档:
注: 绘制的信息窗口不是实时取景。视图在返回时呈现为图像(使用
View.draw(Canvas)
)。这意味着对视图的任何后续更改都不会反映在地图上的信息窗口中。要稍后更新信息窗口(例如,在加载图像后),请调用showInfoWindow()
。此外,信息窗口将不遵循普通视图(如触摸或手势事件)的任何典型交互性。但是,您可以在整个信息窗口中收听通用单击事件,如下一节所述。
你不能不使用一些肮脏的黑客。
信息窗口不是实时视图,它只是从您提供的视图生成的图像。因此,任何事件都不会被触发。
但是,如果你真的需要这样做,这是最好的方法:谷歌地图安卓API v2 - 交互式信息窗口(如原始安卓谷歌地图)我自己用过它,它很棒(而且我正在使用 Xamarin)。
例:
这是地图包装器: http://pastebin.com/CDfxVZvi
这是适配器:http://pastebin.com/rHsjxxyn
这是触摸侦听器:http://pastebin.com/4kMTygfE
然后我创建我需要的一切:http://pastebin.com/AGyRTnu4
它比Java复杂一些,因为我们必须在构造函数中传递每个对象。不要忘记在布局中的地图容器周围放置一个 MapWrapper。
在 xml 中试试这个
android:linksClickable="true"