setZOrderOnTop(true);
mHolder.setFormat(PixelFormat.TRANSPARENT);//设置背景透明 设置SurfaceView透明,但是这样会造成SurfaceView的组件会覆盖其他的组件。
此时SurfaceView组件是在最顶层的,无法通过调整层次问题来使得其他组件进行显示。
那么我们需要设置背景透明又需要显示其他控件的时候应该怎么办呢?
解决方案:
使用PopupWindow或者dialog的功能,PopupWindow或者dialog是显示在Activity之外的,测试过他们不会被SurfaceView覆盖,这种方案适用于点击实现组件的弹出,dialog的位置比较固定(屏幕正中间),而PopupWindow可以显示在屏幕所有的地方,较为灵活。
使用PopupWindow还需要注意的地方就是,不能在onCreate()等函数中显示PopupWindow,因为此时Activity的资源还未初始化完整,会导致应用的崩溃。
网上寻找到一种解决方案,这下面这条函数中调用则不会引起问题,但是需要注意每次该Activity出现在屏幕最前面时候都会调用这个函数,因此如果只想显示一次PopupWindow的话,需要设置一个flag进行控制。
@Override
public void onWindowFocusChanged(boolean hasFocus)
当SurfaceView位于最顶层导致其他组件无法显示时,可以利用PopupWindow或dialog的特性,它们不会被SurfaceView覆盖。PopupWindow适合灵活布局,但需避免在onCreate()中显示,而应在onWindowFocusChanged()中控制,注意防止重复显示。
405

被折叠的 条评论
为什么被折叠?



