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

Pri*_*990 16 android android-fragments android-actionbar android-support-library

我将android-support-library-v7-appcompat添加到我的项目中,以支持上面API级别7的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();
    }
 }
Run Code Online (Sandbox Code Playgroud)

此活动的主题在清单中设置为:

@风格/ Theme.AppCompat

这是android 2.3上的结果(在4.0+上,ActionBar显示得很好) actionBar重叠

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

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

Pri*_*990 18

编辑: 现在已正式修复并在支持库v19中发布.

正如JJD在下面评论的那样,你可以正常使用android.R.id.contentappcompat-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,当您使用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;
}
Run Code Online (Sandbox Code Playgroud)

感谢弗雷德里克

  • 请注意,使用appcompat-v7 r.19.0.0会引入[影响运行Android 2.3.x的设备的新错误,如问题#59077中所述](https://code.google.com/p/android/issues/detail? ID = 59077). (2认同)