我有一个带有 SherlockMapFragment 的 Activity,它基本上是一个 SupportMapFragment。在其中,我显示了带有一些标记的地图,例如加油站。我想要的是一个看起来有点像 Android 版 Google Maps 的 UI,尤其是带有透明的 ActionBar,这样您就可以通过 ActionBar 看到地图。为了确保这种行为,我在调用 setContentView() 之前在我的 Activity 中调用 requestWindowFeature。
this.requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
setContentView(layout.activityLayout);
对我来说重要的是 ActionBar(我使用 Sherlock)是透明的,但它的操作(OptionsMenu)仍然可见,因此用户可以单击透明 ActionBar 上的操作 - 就像 Android 版 Google 地图一样。
到目前为止,一切正常并且看起来不错。接下来是我想在列表中显示地图上的标记,以便用户可以选择更适合他的标记。这只是具有相同数据的不同表示。ListView 是 fragmentLayout.xml 中的一个元素,我只是将其膨胀并填充数据。
现在问题来了:当我调用 requestWindowFeature 来告诉系统使用 ActionBar 后面的空间时,它会将 ListView 膨胀为相同的大小,因此我的列表的第一个元素位于 ActionBar 后面而不是 ActionBar 下方。
如果我可以例如重置行为,这样我的视图会根据我的需要从 ActionBar 后面或下面开始,那将是完美的。
我尝试了什么:1)当然,我尝试在对以 RuntimeException 结尾的 ListView 进行充气后调用 requestWindowFeature,因为您只能在 setContentView() 之前调用它
2)我尝试通过 setFeatureInt() 设置标志并从片段中失效,如下所示:
getActivity().getWindow().setFeatureInt(
Window.FEATURE_ACTION_BAR_OVERLAY),
R.layout.activityLayout);
super.onCreate(null);
getActivity().invalidateOptionsMenu();
ViewGroup vg = (ViewGroup) getActivity().findViewById(R.layout.activityLayout);
vg.invalidate();
vg.requestLayout();
vg.postInvalidate();
如果有人可以帮助我,那就太好了。如果您需要更多信息,请与我联系。
干杯伊曼纽尔