Dialog里面的SurfaceView(或带有Theme.Dialog的Activity)有布局故障

时间:2013-06-23 19:42:37

标签: android layout dialog surfaceview visual-glitch

我正在尝试在SurfaceView内显示Activity,其主题扩展为Theme.Dialog(您可以认为我试图在{{1}内展示它我有一些布局故障。

我无法拍照,因为拍摄截图时故障消失了:/但无论如何你看到Dialog的“洞”从其原始位置移开并产生一些奇怪的叠加效果...

问题似乎与标志SurfaceView有关,如果我将其设置为假,则故障就会消失......

是否有任何可能的解决方法继续使用windowIsFloating标志?


重现问题的简单布局:

windowIsFloating

并修改此活动的主题,以便重现此问题:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#fff">

<FrameLayout android:id="@+id/container"
             android:layout_width="250dp"
             android:layout_height="250dp"
             android:layout_centerInParent="true"
             android:padding="30dp"
             android:background="#ff0">

    <SurfaceView android:id="@+id/surface"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent" />

</FrameLayout>

2 个答案:

答案 0 :(得分:2)

似乎没有办法解决这个故障,只是windowIsFloating标志与SurfaceView非常错误......

所以,在这里得到答案How to create a transparent activity WITHOUT windowIsFloating后,我最终创建了一个扩展Dialog主题的主题,但将windowIsFloating标记设置为falsewindowIsTranslucent设置为{{ 1}}。

这样你需要手动创建一个行为像Dialog的布局,但你没有任何故障,你的背景可以完全透明:)


一个可以解决问题的主题示例:

true

然后您需要将边距应用于布局,否则它将作为正常活动全屏显示。

答案 1 :(得分:1)

我同意这一点,因为它可能对其他人有用。我在对话框中遇到了SurfaceView的透明度问题,以下答案帮助我解决了这个问题(我没有像这里建议的那样使用windowIsFloating = false,尽管它也可以解决这个问题):

https://stackoverflow.com/a/7061396/875442

事实证明我的问题是Z-ordering和透明度问题。