Issue
I'm trying to use the 'setInfoWindowAdapter' propery within my map view for a particular marker, but with 'Marker 2' there appears to be some unwanted space appearing underneath the title for some reason (Marker 2) (see attached screenshots). What can be done in order to prevent this from happening?
FragmentCustomMapview.java
public class FragmentCustomMapview extends android.support.v4.app.Fragment implements OnMapReadyCallback {
public FragmentCustomMapview() {
// Required empty constructor
}
GoogleMap mGoogleMap;
MapView mMapView;
SwitchCompat swt;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_custommapview, container, false);
mMapView = (MapView) v.findViewById(R.id.map_custommapview);
mMapView.onCreate(savedInstanceState);
mMapView.getMapAsync(this); //this is important
swt = (SwitchCompat) v.findViewById(R.id.switch_map_custommapview);
return v;
}
@Override
public void onMapReady(GoogleMap googleMap) {
mGoogleMap = googleMap;
mGoogleMap.getUiSettings().setZoomControlsEnabled(true);
mGoogleMap.setBuildingsEnabled(true);
mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
swt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
initMap(isChecked);
}
});
initMap(swt.isChecked());
// Add markers and move the camera
LatLng marker1 = new LatLng(51.510256, -0.135106);
mGoogleMap.addMarker(new MarkerOptions()
.position(marker1)
.title("Lorem ipsum dolor")
.snippet("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.")
);
LatLng marker2 = new LatLng(51.509793, -0.134961);
mGoogleMap.addMarker(new MarkerOptions()
.position(marker2)
.title("Marker 2")
);
mGoogleMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker arg0) {
return null;
}
@Override
public View getInfoContents(Marker marker) {
Context mContext = getActivity();
LinearLayout info = new LinearLayout(mContext);
info.setOrientation(LinearLayout.VERTICAL);
TextView title = new TextView(mContext);
title.setTextColor(Color.BLACK);
title.setGravity(Gravity.CENTER);
title.setTypeface(null, Typeface.BOLD);
title.setText(marker.getTitle());
title.setSingleLine(false);
TextView snippet = new TextView(mContext);
snippet.setTextColor(Color.GRAY);
snippet.setText(marker.getSnippet());
snippet.setMultiline(false)
info.addView(title);
info.addView(snippet);
return info;
}
});
// Updates the location and zoom level of the MapView
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(51.509932, -0.134720), 18);
mGoogleMap.animateCamera(cameraUpdate);
}
@Override
public void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
public void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mMapView.onSaveInstanceState(outState);
}
@Override
public void onLowMemory() {
super.onLowMemory();
mMapView.onLowMemory();
}
private void initMap(boolean isChecked){
if (isChecked) {
mGoogleMap.setMapStyle(new MapStyleOptions(getResources().getString(R.string.style_json)));
} else {
mGoogleMap.setMapStyle(null);
}
}
}
1st marker
2nd marker
Solution
Don't add your TextView snippet
to your LinearLayout info
if your Marker
has no snippet:
@Override
public View getInfoContents(Marker marker) {
Context mContext = getActivity();
LinearLayout info = new LinearLayout(mContext);
info.setOrientation(LinearLayout.VERTICAL);
TextView title = new TextView(mContext);
title.setTextColor(Color.BLACK);
title.setGravity(Gravity.CENTER);
title.setTypeface(null, Typeface.BOLD);
title.setText(marker.getTitle());
title.setSingleLine(false);
info.addView(title);
if (marker.getSnippet() != null) {
TextView snippet = new TextView(mContext);
snippet.setTextColor(Color.GRAY);
snippet.setText(marker.getSnippet());
snippet.setSingleLine(false);
info.addView(snippet);
}
return info;
}
Answered By - antonio
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.