I can supply the custom view, the views have the autolink for phone or
email, but when I click the InfoWindow, it raised as whole InfoWindow
event. Here is the codes I revised from a post by Commonware. Any light?
public class TaskMapV2 extends FragmentActivity implements
OnInfoWindowClickListener {
private static final String STATE_NAV="nav";
private static final int[] MAP_TYPE_NAMES= { R.string.normal,
R.string.hybrid, R.string.satellite, R.string.terrain };
private static final int[] MAP_TYPES= { GoogleMap.MAP_TYPE_NORMAL,
GoogleMap.MAP_TYPE_HYBRID, GoogleMap.MAP_TYPE_SATELLITE,
GoogleMap.MAP_TYPE_TERRAIN };
private GoogleMap map=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map_fragement);
SupportMapFragment mapFrag=
(SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
map=mapFrag.getMap();
if (savedInstanceState == null) {
CameraUpdate center=
CameraUpdateFactory.newLatLng(new LatLng(40.76793169992044,
-73.98180484771729));
CameraUpdate zoom=CameraUpdateFactory.zoomTo(15);
map.moveCamera(center);
map.animateCamera(zoom);
}
addMarker(map, 40.748963847316034, -73.96807193756104, "A place",
"Place Name");
map.setInfoWindowAdapter(new MapPopupAdapter(getLayoutInflater()));
map.setOnInfoWindowClickListener(this);
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
@Override
public void onInfoWindowClick(Marker marker) {
Toast.makeText(this, marker.getTitle(), Toast.LENGTH_LONG).show();
}
private void addMarker(GoogleMap map, double lat, double lon,
int title, int snippet) {
map.addMarker(new MarkerOptions().position(new LatLng(lat, lon))
.title(getString(title))
.snippet(getString(snippet)));
}
private void addMarker(GoogleMap map, double lat, double lon,
String title, String snippet) {
map.addMarker(new MarkerOptions().position(new LatLng(lat, lon))
.title(title)
.snippet(snippet));
}
}
public class MapPopupAdapter implements InfoWindowAdapter {
LayoutInflater inflater=null;
public MapPopupAdapter(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.map_overlay_view, null);
TextView tv=(TextView)popup.findViewById(R.id.item_title);
tv.setText(marker.getTitle());
TextView snippet = (TextView)popup.findViewById(R.id.item_snippet);
snippet.setText(marker.getSnippet());
TextView phone = (TextView)popup.findViewById(R.id.item_phone);
phone.setText("262-347-5678");
return(popup);
}
}
map_overlay_view
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="35dip"
android:paddingLeft="10dip"
android:minWidth="200dip"
android:id="@+id/balloon_main_layout"
android:paddingTop="0dip"
android:paddingRight="0dip">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1"
android:paddingTop="10dip"
android:id="@+id/balloon_inner_layout">
<TextView android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/item_title"
android:text="@string/item_title"
android:textSize="16sp"
android:textColor="#FF000000"></TextView>
<TextView android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/item_snippet"
android:text="@string/item_snippet"
android:textSize="16sp"
android:textColor="#FF000000"></TextView>
<TextView android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/item_phone"
android:text="@string/item_phone"
android:textSize="16sp"
android:autoLink="phone"
android:textColor="#FF000000"></TextView>
<TextView android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/item_email"
android:text="@string/balloon_item_email"
android:autoLink="email"
android:textSize="16sp"></TextView>
</LinearLayout>
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon_close_32"
android:id="@+id/close_img_button"
android:paddingLeft="12dip"
android:paddingBottom="12dip"
android:paddingRight="6dip"
android:paddingTop="6dip"></ImageView>
</LinearLayout>
Many Thanks!
On Wed, Mar 13, 2013 at 2:34 PM, Edward Lin <[email protected]> wrote:
> I will have a try and let you know the results.
>
> Thanks!
>
>
>
>
> On Wed, Mar 13, 2013 at 3:25 AM, Martin <[email protected]> wrote:
>
>> Can you use the InfoWindowAdapter and override it's GetInfoContent
>> handler to supply your own custom View and in that custom View create the
>> clickable Views you require?
>>
>>
>> https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/GoogleMap.InfoWindowAdapter#getInfoContents%28com.google.android.gms.maps.model.Marker%29
>>
>> Martin.
>>
>>
>>
>> On Tuesday, March 12, 2013 9:29:00 PM UTC, elin wrote:
>>>
>>> According to the following link: https://developers.**
>>> google.com/maps/documentation/**android/v1/mapkey<https://developers.google.com/maps/documentation/android/v1/mapkey>
>>>
>>> *Note*: Version 1 of the Google Maps Android API as been officially
>>> deprecated as of December 3rd, 2012. *This means that from March 3rd,
>>> 2013 you will no longer be able to request an API key for this version.* No
>>> new features will be added to Google Maps Android API v1. However, apps
>>> using v1 will continue to work on devices. Existing and new developers are
>>> encouraged to use Google Maps Android API
>>> v2<https://developers.google.com/maps/documentation/android/>
>>> .
>>>
>>> So I am trying to migrate my Android Map API to Google Map API V2. My
>>> Map application was using ItemsizedOverlay with onTap event so that user
>>> can click the Overlay on different links, views or buttons to navigate to
>>> the destination or close the BalloonItem if user click the close button.
>>> But on API v2, the ItemizedOverlay is replaced as InfoWindow. As a
>>> result, any listeners you set on the InfoWindow are disregarded and you
>>> cannot distinguish between click events on various parts of the view.
>>>
>>> I cannot believe migrate to Map API v2 is going to reduce the features
>>> of the Map application. Those features are something I cannot use without
>>> it. Can anyone let me know any alternative for getting onTap (or onClick)
>>> listener for the InfoWindow? Or what other control can provide the similar
>>> feature for InfoWindow.
>>>
>>> Many thanks!
>>>
>>> --
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Android Developers" group.
>> To post to this group, send email to [email protected]
>> To unsubscribe from this group, send email to
>> [email protected]
>> For more options, visit this group at
>> http://groups.google.com/group/android-developers?hl=en
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "Android Developers" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>>
>>
>
>
--
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
---
You received this message because you are subscribed to the Google Groups
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.