支持库和碎片覆盖内容的ActionBar

我将android-support-library-v7-appcompat添加到我的项目中,以支持上述API级别7的ActionBar。

它的工作原理就像是Android 4.0+上的一个魅力,也是在android 2.3上的一个普通的Activity,它在onCreate中有setContentView,但是当activity在onCreate中加载一个片段时,ActionBar会和我的布局的内容重叠。 在所有其他情况下,ActionBar运行良好。

这里是一些代码:

class AssetsActivity extends ActionBarActivity{ @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); OpenLocalFragment assets = OpenLocalFragment.newInstance(index); assets.setArguments(getIntent().getExtras()); getSupportFragmentManager().beginTransaction() .add(android.R.id.content, assets).commit(); } } 

这个活动的主题是在清单中设置为:

@风格/ Theme.AppCompat

这是在Android 2.3(在4.0以上的ActionBar显示)的结果, actionBar重叠

你可以这样说,第一个lisview项目是重叠的ActionBar(白色圆形图标和标题“我的活动”)

有可能我在支持库中发现了一个bug,现在只发布了2天? 谢谢大家。

Solutions Collecting From Web of "支持库和碎片覆盖内容的ActionBar"

编辑:这是现在正式修复,并在支持库v19发布

正如JJD在下面评论的,你可以使用appcompat-v7 r.19.0.0或更新的版本来正常使用android.R.id.content 。 主页button也起作用。

换句话说:如果您使用19.0.0或更新版本,则不需要以下解决方法。


我在code.google.com上得到了答案。 我从frederic的回答中做了一个总结:

对于ICS前设备,您必须使用:

R.id.action_bar_activity_content

代替

android.R.id.content

R.id.action_bar_activity_content是用于显示应用程序内容的布局中使用的新id,使用支持v7 appcompat ActionBarActivity时,会显示它replaceandroid.R.id.content。

您可以使用此代码检索活动内容的正确标识:

 public static int getContentViewCompat() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH ? android.R.id.content : R.id.action_bar_activity_content; } 

感谢frederic

如果你不想修改android-support-library-v7-appcompat的源代码,另一种方法是在布局xml文件中添加一个空的布局,例如:

 <LinearLayout android:id="@+id/content_view" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"/> 

并使片段调用添加到该布局,而不是:

 ft.add(R.id.content_view, mFragment, mTag); 

似乎有点晚,但我有同样的问题,并没有看到答案在这里….

检查你的styles.xml文件,可能有一个xml属性覆盖操作栏设置为true即

真正

整个条目看起来像这样

  <item name ="actionBarTabTextStyle" > @style/TabTextStyle</item> <item name = "windowActionBarOverlay">true</item> 

如果是这种情况,只需将“windowActionBarOverlay”的值更改为false即可。

添加一个额外的空白列表标题与操作栏的大小。 应该是一个很好的解决方法。