7

编辑:如果我扩展FragmentActivity而不是ActionBarActivity我的布局再次出现(ActionBar当然没有)。

在设备上ActionBar按预期工作4.x,但在我的2.3设备上,我得到的只是它下面的ActionBar一个空白屏幕Fragment似乎没有被添加到Activity.

主题.xml

<style name="AppTheme" parent="AppBaseTheme">
    <item name="actionBarStyle">@style/Widget.ActionBar</item>
</style>

主题-v11.xml

<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:actionBarStyle">@style/Widget.ActionBar</item>
</style>

样式.xml

<style name="Widget.ActionBar" parent="@style/Widget.AppCompat.ActionBar">
    <item name="android:background">@color/actionbar_background</item>
    <item name="background">@color/actionbar_background</item>
</style>

活动onCreate()

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
myFragment = new WallFragment();
fragmentTransaction.add(android.R.id.content, 
    myFragment, myFragment.FRAGMENT_TAG);
fragmentTransaction.commit();

我正在使用 Gradle 将AppCompat ActionBar库包含在我的应用程序中。

compile 'com.android.support:appcompat-v7:18.0.+'
4

1 回答 1

11

在 Android SDK 的工具目录中加载hierarchyviewer,看起来您放置片段的视图android.R.id.content位于 4.x 设备上,并且位于R.id.action_bar_activity_content运行 AppCompat ActionBar 库的 2.3 设备上。

不幸的是,在添加片段时,您可能需要基于平台版本进行分支。这是http://code.google.com/p/android/issues/detail?id=58108中的建议(还不确定 3.x 设备)。

使用此方法可以获得添加Fragment's 的正确视图。我的测试还表明,当使用 AppCompat ActionBar 库时,3.x 设备的行为类似于 2.3 设备。

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;
}


层次查看器屏幕截图

  • 2.3

2.3

  • 4.x

4.x

于 2013-08-01T15:51:12.060 回答