AppCompat 操作栏库不显示添加的片段
Posted
技术标签:
【中文标题】AppCompat 操作栏库不显示添加的片段【英文标题】:AppCompat Action Bar library not displaying added fragments 【发布时间】:2013-08-02 15:43:11 【问题描述】:编辑:如果我扩展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>
themes-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】:在 Android SDK 的工具目录中加载 hierarchyviewer
,看起来您放置片段的视图在 4.x 设备上是 android.R.id.content
,在运行 AppCompat ActionBar 库的 2.3 设备上是 R.id.action_bar_activity_content
。
不幸的是,在添加片段时,您可能需要基于平台版本进行分支。这是在 http://code.google.com/p/android/issues/detail?id=58108 中建议的(还不确定 3.x 设备)。
使用此方法可以获得添加Fragment
的正确视图。我的测试还表明,3.x 设备在使用 AppCompat ActionBar 库时的行为类似于 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 4.x【讨论】:
另外需要注意的是R.id.action_bar_activity_content
直到setContentView()
在ActionBarActivity中被调用后才会被创建。使用 ABS,我可以使用 android.R.id.content
,而无需在 Activity
中设置布局,而在 Android 2.x
中不是这种情况。
这也解决了当您的内容似乎出现在 Android 2.3 上的 ActionBar 上方时的问题 -- 感谢您注意到这一点!
@Shellum 如果您将 appcompat-v7 更新到版本 19.0.0. 或更新版本,则不再需要在 android.R.id.content
和R.id.action_bar_activity_content
。如您在comment of Chris Banes on issue 59077 中阅读的那样,不同的行为在最新版本的库中统一。
看起来即使在 appcompat-v7 修订版 19.0.0 修复之后,2.x 设备也不会添加片段,除非您设置内容视图(我只是使用空框架布局)。关于不再需要 R.id.action_bar_activity_content 的部分是正确的,但在 2.x 设备上它会默默地无法添加片段。
@rrbrambley 请在错误跟踪器上报告此问题。原bug尚未关闭:code.google.com/p/android/issues/detail?id=59077以上是关于AppCompat 操作栏库不显示添加的片段的主要内容,如果未能解决你的问题,请参考以下文章