如何仅为特定标记设置 InfoWindowAdapter

How to setInfoWindowAdapter for particular markers only

我正在尝试在我的地图视图中使用 'setInfoWindowAdapter' 属性 作为特定标记,但是 'Marker 2' 似乎出现了一些不需要的 space出于某种原因(标记 2)在标题下方(参见随附的屏幕截图)。可以做些什么来防止这种情况发生?

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);
        }
    }
}

第一个标记

第二个标记

如果您的 Marker 没有摘要,请不要将您的 TextView snippet 添加到您的 LinearLayout info

@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;
}