ActionBar包含支持库和Fragments叠加内容

时间:2013-07-26 12:27:08

标签: android android-fragments android-actionbar android-support-library

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

它就像android 4.0+上的魅力一样,也在android 2.3上有一个普通的Activity,在onCreate中有setContentView,但是当活动在onCreate中加载一个Fragment时,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 overlaping

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

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

4 个答案:

答案 0 :(得分:18)

修改 现在已正式修复并在支持库v19 中发布。

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

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


我在code.google.com得到了答案。我从弗雷德里克的回答中总结了一下:

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

  

R.id.action_bar_activity_content

而不是

  

android.R.id.content

R.id.action_bar_activity_content 是布局中用于显示应用内容的新ID,当您使用支持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

答案 1 :(得分:1)

如果您不想修改 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);

答案 2 :(得分:1)

似乎有点迟到了,但我遇到了同样的问题,并且没有在这里找到答案....

检查你的styles.xml文件,可能有一个xml属性用于将actionbar设置为true,即

整个条目看起来像这样

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

如果是这种情况,那么只需更改&#34; windowActionBarOverlay&#34;的值。为假。

答案 3 :(得分:0)

添加一个额外的空列表标题,其中包含操作栏的大小。应该是一个很好的解决方法。