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

Aus*_*ney 7 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>
Run Code Online (Sandbox Code Playgroud)

主题-v11.xml

<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:actionBarStyle">@style/Widget.ActionBar</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

活动 onCreate()

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

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

compile 'com.android.support:appcompat-v7:18.0.+'
Run Code Online (Sandbox Code Playgroud)

She*_*lum 11

hierarchyviewer在Android SDK的工具目录中加载,看来放置片段的视图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.我的测试还表明,当使用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;
}
Run Code Online (Sandbox Code Playgroud)


hierarchyviewer截图

  • 2.3

2.3

  • 4.x版

4.x版

  • @Shellum如果你**appcompat-v7更新到版本19.0.0.**或更新,则不再需要在`android.R.id.content`和`R.id.action_bar_activity_content`之间切换**.在最新版本的库中统一了不同的行为,您可以在[问题59077上的Chris Banes的评论]中阅读(https://code.google.com/p/android/issues/detail?id=59077# C8). (3认同)