Jetpack Compose:将视图添加到窗口管理器时崩溃

时间:2020-10-29 05:35:44

标签: android android-jetpack-compose

我试图将jetpack compose视图添加到窗口管理器以获取App覆盖视图。但是该应用程序崩溃了。我已经使用以下代码来添加jetpack撰写视图。当我尝试XML布局时,它工作正常。还有其他人遇到这个问题吗?预先感谢。

private val overlayWindowManager by lazy {
    getSystemService(Context.WINDOW_SERVICE)
            as WindowManager
}

 private fun initWindowManager() {
    val params = WindowManager.LayoutParams(
        WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
        WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
        PixelFormat.TRANSLUCENT
    )
    params.gravity = Gravity.RIGHT or Gravity.TOP
    overlayWindowManager.addView(ComposeView(this).apply {
        setContent {  Text("WINDOW") }
    }, params)
}

错误日志

 java.lang.IllegalStateException: ViewTreeLifecycleOwner is not present in this window. Use ComponentActivity, FragmentActivity or AppCompatActivity to configure ViewTreeLifecycleOwner automatically, or call ViewTreeLifecycleOwner.set() for this View or an ancestor in the same window.
    at androidx.compose.ui.platform.AbstractComposeView.onAttachedToWindow(ComposeView.kt:176)
    at android.view.View.dispatchAttachedToWindow(View.java:20479)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3489)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2417)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1952)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8171)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:972)
    at android.view.Choreographer.doCallbacks(Choreographer.java:796)
    at android.view.Choreographer.doFrame(Choreographer.java:731)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:957)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:223)
    at android.app.ActivityThread.main(ActivityThread.java:7656)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)

2 个答案:

答案 0 :(得分:0)

您的主要活动延伸到哪个班级? 看起来您的答案在堆栈跟踪的第一行 Use ComponentActivity, FragmentActivity or AppCompatActivity to configure ViewTreeLifecycleOwner automatically

call ViewTreeLifecycleOwner.set() for this View or an ancestor in the same window

答案 1 :(得分:0)

使用ViewTreeLifecycleOwner.set()

windowManager.addView(ComposeView(this).apply {
    ViewTreeLifecycleOwner.set(this, activity)
    setContent {  Text("WINDOW") }
}, params)