MapFragment UI控件按钮功能齐全但不可见

时间:2013-05-29 09:49:48

标签: android google-maps google-maps-android-api-2 google-maps-api-2

解决方案:

解决方案是我之前致电zOrderOnTop(true)以解决black flickering bug问题。面对这一事件,我猜上面提到的错误目前有一个有效的解决方法。我也尝试了线程中的其他建议,但是没有一个在不影响应用程序的情况下工作

原始问题:

在我的应用程序中,我想显示一个嵌套在另一个片段中的地图片段,这对于最新的API和支持库来说并不是太大的问题。但地图显示了一些奇怪的行为:

Example map image

您可能已经注意到没有按钮可见。用于缩放的plusminus按钮,例如。但是myLocation按钮似乎也消失了。有趣的是:当我点击右上角或右下角的屏幕(您可能知道它们应该在哪里)时,该应用程序完全符合您的预期!

由于我只是与the android maps api documentation tutorial并肩工作,我不认为这是设置可见内容的问题。 我更倾向于认为这与我展示片段的方式有关,某些层似乎妨碍了。我该如何解决这个问题?

也许有人可以发现我的错误,我会非常感激!

HostFragment

public class HostFragment extends Fragment {

...

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ViewGroup res = (ViewGroup) inflater.inflate(R.layout.fragment_map, null);

        // Build the MapFragment as a nested fragment into this one
        mMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentByTag(MAP);
        if (mMapFragment == null) {
            mMapFragment = SupportMapFragment.newInstance(mMapOptions);
            FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
            transaction.add(R.id.mapContainer, mMapFragment, MAP).commit();
        }

        // We can't be guaranteed that the map is available because Google Play services might not
        // be available. We'll check this again later on
        setUpMapIfNeeded();

        return res;
    }

    @Override
    public void onResume() {
        super.onResume();

        // Verify that the map is set up before presenting it to the user
        setUpMapIfNeeded();
    }

    private void setUpMapIfNeeded() {
        // Do a null check to confirm that we haven't already instantiated the map.
        if (mMap == null) {
            // Try to obtain the map from the MapFragment.
            mMap = mMapFragment.getMap();
            // Check if we were successful in obtaining the map.
            if (mMap != null) {
                setUpMap();
            }
            else {
                LOG.debug("Map is null");
            }
        }
    }

    /**
     * Sets the parameters for the map that will be displayed to the user
     */
    private void setUpMap() {
        mMap.setMyLocationEnabled(true);
        mMap.getUiSettings().setMyLocationButtonEnabled(true);

        mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
    }
}

主机布局xml

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/mapContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </RelativeLayout>

祝你好运

更新
1:使用FrameLayout而不是RelativeLayout 解决问题 2:明确地将地图类型设置为NORMAL 解决问题

4 个答案:

答案 0 :(得分:2)

尝试修改setUpMap(),如下所示:

private void setUpMap() {
    mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); //added line
    mMap.setMyLocationEnabled(true); 
    mMap.getUiSettings().setMyLocationButtonEnabled(true); //my code did not have these and still be able to display the zoom in, zoom out, and my location button
    mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
}
祝你好运!

答案 1 :(得分:1)

您使用的是zOrderOnTop吗?在这种情况下,你不会看到按钮。更多信息:https://developers.google.com/maps/documentation/android/map?hl=pl#using_xml_attributes

答案 2 :(得分:0)

您是否在具有不同API的不同设备上进行了测试? 2.x ... 4.x? 我遇到了同样的问题,所以你必须开发自己的按钮。

答案 3 :(得分:0)

请查看此文档。你肯定错过激活缩放控件;)

gmaps v2 zoom controls