Android 带有支持库和片段覆盖内容的ActionBar

Android 带有支持库和片段覆盖内容的ActionBar,android,android-fragments,android-actionbar,android-support-library,Android,Android Fragments,Android Actionbar,Android Support Library,我在我的项目中添加了android-support-library-v7-appcompat,以支持上面API级别7中的ActionBar 它在安卓4.0+和安卓2.3上都像一个符咒,在onCreate中有一个正常的活动,它有setContentView,但是当活动在onCreate中加载一个片段时,ActionBar会与我的版面内容重叠。在所有其他场景中,ActionBar都运行良好 下面是一些代码: class AssetsActivity extends ActionBarActivity

我在我的项目中添加了android-support-library-v7-appcompat,以支持上面API级别7中的ActionBar

它在安卓4.0+和安卓2.3上都像一个符咒,在onCreate中有一个正常的活动,它有setContentView,但是当活动在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();
    }
 }
此活动的主题在清单中设置为:

@style/Theme.AppCompat

这是安卓2.3上的结果(在4.0+上,ActionBar显示得很好)

您可以确定第一个lisview项目与ActionBar重叠(白色圆形图标和标题“我的活动”)

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

添加一个额外的空列表标题,其大小与操作栏相同。这应该是一个很好的解决办法

编辑: 这一问题现已正式修复,并在支持库v19中发布

正如JJD在下面评论的那样,您可以正常地将android.R.id.content与appcompat-v7 R.19.0.0或更新版本一起使用。“主页”按钮也起作用

换句话说:如果您使用19.0.0或更高版本,则不再需要下面的解决方法


我终于得到了答案。我对弗雷德里克的回答做了一个总结:

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

R.id.action\u bar\u activity\u内容

而不是

android.R.id.content

R.id.action\u bar\u activity\u content是版面中用于显示应用程序内容的新id,当您使用support v7 appcompat ActionBarActivity时,它似乎取代了android.R.id.content

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

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"/>

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

检查styles.xml文件,可能有一个xml属性用于覆盖actionbar设置为true ie

真的

整个条目看起来像这样

@style/TabTextStyle
真的


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

在本例中,这是一个简单的解决方法,但我在许多具有不同布局的活动中使用了这一原则。我将发布一个带有当前解决方案的编辑。无论如何,谢谢,可能是某人的解决方案。问题解决了,请看下面我的答案。注意:这现在正式成为Android中的一个bug。他们修复了它,它将在未来发布。请注意,使用appcompat-v7 r.19.0.0除了Primoz990之外,还引入了一个。答案:如果使用appcompat-v7 r.19.0.0或更新版本,您可以使用
android.r.id.content
。克里斯·贝恩斯(Chris Banes)说,“主页”按钮在安卓2.3及更高版本上工作。您不再需要参考
R.id.action\u bar\u activity\u content
的变通方法。我使用的是支持库版本19.0.1,但片段仍被覆盖。尝试查看解决方法是否有效,但是如果我在Android 2.3的R.id.action\u bar\u activity\u内容上使用replace(),我会得到一个“找不到id 0x7f050015(mypackage:id/action\u bar\u activity\u content)的视图”。我能试试什么?编辑:我刚刚使用了80赫兹的解决方案,添加了一个空的LinearLayout并添加了您可以尝试添加的视图。addToBackStack(null)用于片段事务。如果将片段a替换为片段B(addtobackstack),而不是将B替换为C(无后退),然后单击后退按钮,我会遇到一些问题。C未暂停,A显示为与C重叠。
ft.add(R.id.content_view, mFragment, mTag);
    <item name ="actionBarTabTextStyle" > @style/TabTextStyle</item>
    <item name = "windowActionBarOverlay">true</item>