【发布时间】:2014-05-22 11:50:09
【问题描述】:
我希望能够将任何 Fragment 显示为覆盖在任何 Activity 之上。结果应如下所示:
实现这一点的最简单方法是在不可见的 Activity 中放置一个额外的 FrameLayout。当应显示叠加层时,可以将其放置在 FrameLayout 中,然后将其设置为可见。
这很好用,但当然只在准备这样做的活动中。此外,这不会覆盖操作栏。我正在寻找一种更通用的方法。像这样的:
// In Activity
public void showFragmentOverlay() {
SomeFragment someFragment = new SomeFragment();
FragmentOverlay overlay = new FragmentOverlay(this, someFragment);
overlay.show();
}
// Overlay class
public class FragmentOverlay {
private Activity activity;
private Fragment fragment;
public FragmentOverlay(Activity activity, Fragment fragment) {
this.activity = activity;
this.fragment = fragment;
}
private FrameLayout frameLayout;
public void show() {
// Find root view/layout somehow
// Create FrameLayout programmatically and place it in the root layout
// Add Fragment to FrameLayout
}
public void close() {
// Remove FrameLayout from root layout
}
}
我在 iOS 上使用了一个非常相似的解决方案,只需将视图直接添加到窗口以覆盖所有其他视图。但是我无法在 Android 上运行它。问题是,我没有发现如何查找/获取根布局。找到根视图没有问题(activity.getWindow().getDecorView().getRootView()),但我需要一个 ViewGroup/Layout 才能添加一个新的子视图。
如何在 Android 上做到这一点?
【问题讨论】:
-
您是否尝试过使用
DialogFragment? -
将您的叠加层放入具有透明背景的新活动中。然后开始这个活动。瞧。
标签: android android-layout android-fragments