AppCompat Action Bar库未显示添加的片段

时间:2013-08-01 15:50:15

标签: android android-fragments fragmenttransaction android-actionbar-compat

编辑:如果我延长FragmentActivity而不是ActionBarActivity,我的布局会再次显示(当然没有ActionBar)。

ActionBar按预期在4.x设备上运行,但在我的2.3设备上,我得到的是ActionBar空白屏幕在它下面。似乎Fragment似乎没有添加Activity

的themes.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>

styles.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.+'

1 个答案:

答案 0 :(得分:11)

在Android SDK工具目录中加载hierarchyviewer,您在4.x设备上放置片段的视图为android.R.id.content,在运行该设备的2.3设备上显示为R.id.action_bar_activity_content AppCompat ActionBar库。

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

使用此方法获取添加Fragment的正确视图。我的测试还表明,当使用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;
}


hierarchyviewer截图

  • 2.3

2.3

  • 4.x的

4.x