1

解决方案:

解决方案是我之前打电话zOrderOnTop(true)来解决黑色闪烁的错误。面对如此多的事件,我猜上述错误目前还没有有效的解决方法。我也尝试了线程中的其他建议,但它们都不能在不损害应用程序的情况下工作

原始问题:

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

示例地图图像

您可能已经注意到,没有可见的按钮。例如,用于缩放的plus和按钮。minusmyLocation按钮似乎也不见了。有趣的是:当我点击右上角或右下角的屏幕(您可能知道它们应该在哪里)时,应用程序会完全按照您的预期运行!

由于我只是与android maps api 文档教程一起工作,我不认为这是设置可见内容的问题。我宁愿假设这与我显示片段的方式有关,某些层似乎妨碍了。我怎样才能解决这个问题?

也许这里有人能发现我的错误,我将非常感激!

主机片段

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

4 回答 4

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

祝你好运!

于 2013-05-29T15:59:54.960 回答
1

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

于 2013-05-29T15:55:13.440 回答
0

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

于 2013-05-29T10:08:02.830 回答
0

请检查此文档。您肯定会错过激活缩放控件;)

gmaps v2 缩放控件

于 2013-05-29T11:15:57.767 回答