gpt4 book ai didi

android - 将 Fragment 显示为覆盖在任何 Activity 之上

转载 作者:太空狗 更新时间:2023-10-29 14:14:29 26 4
gpt4 key购买 nike

我希望能够将任何 Fragment 显示为覆盖在任何 Activity 之上。结果应如下所示:

实现此目的的最简单方法是在不可见的 Activity 中放置一个额外的 FrameLayout。当应该显示叠加层时,可以将其放置在 FrameLayout 中,然后将其设置为可见。

这很好用,但当然只适用于准备这样做的 Activity。此外,这不会覆盖操作栏。我正在寻找一种更通用的方法。像这样:

// 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 上使用了一个非常相似的解决方案,只需将一个 View 直接添加到窗口以覆盖所有其他 View 。但是我无法在 Android 上运行它。问题是,我没有发现如何找到/获取根布局。找到 Root View 没有问题(activity.getWindow().getDecorView().getRootView()),但我需要一个 ViewGroup/Layout 才能添加新的 subview 。

这在 Android 上如何实现?

最佳答案

您可以尝试以下方法:

 View mTopView = getLayoutInflater().inflate(R.layout.activity2, null);
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
getResources().getDisplayMetrics().widthPixels,
getResources().getDisplayMetrics().heightPixels,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);


WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(mTopView, params);

您需要在 list 中添加此权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

关于android - 将 Fragment 显示为覆盖在任何 Activity 之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23806018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com