2014-02-20 3 views
0

В Xamarin, как я могу заставить автолинк работать с некоторыми TextViews, которые отображаются внутри Google Map InfoWindow.Autolink TextViews в Google Map InfoWindow

Вот мой 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: [email protected]"; 

     return v; 
    } 

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

Когда я нажимаю на маркер, я показываю InfoWindow, и он правильно отформатирован как кодированный в классе InfoWindow.

Однако, когда я нажимаю на любой из элементов автозагрузки, автозаправка не работает. Щелчок на InfoWindow регистрируется только как целое InfoWindow и не разделяется на два отдельных текстовых элемента.

Могу ли я, пожалуйста, помочь с этим?

Заранее спасибо

ответ

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

Это сенсорный слушатель: http://pastebin.com/4kMTygfE

Затем я создаю все, что нужно: http://pastebin.com/AGyRTnu4

Это немного сложнее, чем в Jav а потому, что мы должны передавать все объекты в конструкторах. Не забудьте поставить MapWrapper вокруг контейнера карты в вашем макете.

+0

Стефан, я вижу, что ссылка не использует Xamarin. Можете ли вы помочь мне с кодом, чтобы заставить его работать в Xamarin? Это сэкономит мне много времени. Возможно, просто некоторые примеры кода. – Garry

+0

Я добавил код. Принял меня примерно на один день, так что получайте удовольствие от других вещей;) –

+0

Стефан, у меня проблемы с привязкой всего кода. У вас есть простой проект Xamarin с только соответствующим кодом, на который я могу взглянуть? Я был бы очень благодарен :) – Garry

0

Вы не можете получить какую-либо помощь в достижении своей цели по одной простой причине. то, что вы видите в InfoWindow, - это не макет, который вы определили, а изображение, которое было нарисовано из него. что означает, что вы пытаетесь сделать с InfoWindow, невозможно.

Из документации Google:

Примечание: информационное окно, которое обращено не живой вид. Представление отображается как изображение (с использованием View.draw(Canvas)) во время его возврата. Это означает, что любые последующие изменения в представлении не будут отображаться информационным окном на карте. Чтобы позднее обновить информационное окно (например, после загрузки изображения), вызовите showInfoWindow(). Кроме того, информационное окно не будет учитывать какую-либо интерактивность, характерную для обычного вида, такого как события касания или жестов. Однако вы можете прослушивать общий клик по всему информационному окну, как описано в разделе ниже.

0

Попробуйте это в XML

андроида: linksClickable = "истинный"

Смежные вопросы