Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何仅为特定标记设置InfoWindowAdapter_Java_Android_Google Maps_Android Mapview_Android Maps V2 - Fatal编程技术网

Java 如何仅为特定标记设置InfoWindowAdapter

Java 如何仅为特定标记设置InfoWindowAdapter,java,android,google-maps,android-mapview,android-maps-v2,Java,Android,Google Maps,Android Mapview,Android Maps V2,我试图在地图视图中为特定标记使用“setInfoWindowAdapter”属性,但使用“marker 2”时,由于某种原因,标题下方似乎出现了一些不需要的空间(标记2)(请参见随附的屏幕截图)。可以采取什么措施来防止这种情况发生 FragmentCustomMapview.java public class FragmentCustomMapview extends android.support.v4.app.Fragment implements OnMapReadyCallback {

我试图在地图视图中为特定标记使用“setInfoWindowAdapter”属性,但使用“marker 2”时,由于某种原因,标题下方似乎出现了一些不需要的空间(标记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);
        }
    }
}
第一标记

第二个标记


如果您的
标记
没有片段,请不要将
文本视图片段
添加到
线性布局信息

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