当显示包含GLSurfaceView的DialogFragment时,为什么屏幕变暗?

时间:2012-12-06 04:46:27

标签: android android-dialogfragment

我不确定这是否是实现此目的的正确方法,但我想要一个带有GLSurfaceView的弹出窗口。所以我创建了一个dialogFragment,并在其onCreateView方法中返回我的glSurfaceView:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mView = new mGLSurfaceView(this.getDialog().getContext());
    return mView;
}

当显示DialogFragment时,整个屏幕变暗,而不仅仅是背景。当我返回一个带有TextView的LinearLayout时,这不会发生。

1 个答案:

答案 0 :(得分:3)

这是因为GLSurfaceView的工作方式 - GLSurfaceView的View部分只是一个透明容器,渲染是在位于Layout下方的Surface上完成的(并且在触发DialogFragment的Activity的Layout下面)。现在,当创建DialogFragment时,有一个"调光层"插入DialogFragment和父Activity之间,将焦点带到DialogFragment。这个调光层最终位于GLSurfaceView的透明视图部分之间,但位于渲染表面之上,这解释了为什么整个屏幕显得暗淡。

您可以通过在创建GLSurfaceView时调用setZOrderOnTop(true)来解决此问题 - 这将强制渲染Surface位于DialogFragment Layout中的所有其他视图上方,因此位于调光层上方。