Mapbox支持MapFragment / mapView在低于8的Android版本上为黑色

时间:2019-07-12 10:26:02

标签: java android mapbox

我正在使用mapView和SupportMapFragment在片段中显示地图。在较新的Android版本上(我在不同设备上测试了8和9),地图显示没有问题。但是,在较旧的Android版本(我测试了6和7)上,地图显示黑屏(请参见black screen pic)。这些地图似乎可以正常工作。我可以单击它,正确计算路线,然后开始导航。那我初始化mapView / mapFragment错误吗?如何删除黑屏并使mapView在较旧的Android版本上运行?

我尝试以不同的方式初始化mapView,但似乎没有办法解决问题。地图保持黑色。由于也没有控制台输出,关于黑屏,我不知道如何进行。任何帮助将不胜感激。

MainActivity.java:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        Mapbox.getInstance(this, getString(R.string.access_token));
        setContentView(R.layout.activity_main);

(...)

// Create supportMapFragment
        if (savedInstanceState == null) {

            // Create fragment
            final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

            // Build mapboxMap
            MapboxMapOptions options = new MapboxMapOptions();
            options.camera(new CameraPosition.Builder()
                    .target(new LatLng(-52.6885, -70.1395))
                    .zoom(9)
                    .build());

            // Create map fragment
            mapFragment = SupportMapFragment.newInstance(options);

            // Add map fragment to parent container
            transaction.add(R.id.container2, mapFragment, "com.mapbox.map");
            transaction.commit();
            navigationView.setCheckedItem(R.id.nav_home);
        } else {
            mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentByTag("com.mapbox.map");
        }

        mapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(@NonNull MapboxMap mapboxMap) {

                MainActivity.this.mapboxMap = mapboxMap;
                mapView = findViewById(R.id.mapView);

(...)

    @Override
    protected void onStart() {
        super.onStart();
        mapFragment.onStart();
    }

// etc.
(...)

activity_main.xml的一部分,其中包含mapView和mapFragment的container2:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:openDrawer="start">

    <android.support.constraint.ConstraintLayout
        xmlns:mapbox="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <RelativeLayout
            android:id="@+id/container2"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <com.mapbox.mapboxsdk.maps.MapView
                android:id="@+id/mapView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
        </RelativeLayout>
(...)

我希望mapView / fragment不仅可以在较新的Android版本中正确显示,而且在较旧的Android版本中也可以正确显示。

0 个答案:

没有答案