2

我正在尝试展示一个SurfaceView内部Activity主题,该主题可以扩展Theme.Dialog(您可以认为我正在尝试在Dialog类中展示它),但我遇到了一些布局故障。

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

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

关于继续使用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>

并像这样修改您的活动主题以重现该问题:

<style name="MyTheme" parent="@android:style/Theme">
    <item name="android:windowIsFloating">true</item>
</style>
4

2 回答 2

2

似乎没有办法解决故障,只是windowIsFloating标志非常有问题SurfaceView......

因此,按照这里的答案How to create a transparent activity WITHOUT windowIsFloating,我最终创建了一个扩展 Dialog 主题但将windowIsFloating标志设置为falsewindowIsTranslucentto的主题true

这样,您需要手动创建一个行为类似于对话框的布局,但您没有任何故障,并且您的背景可以完全透明:)


可以解决问题的主题的简单示例:

<style name="MyTheme" parent="@android:style/Theme">
    <item name="android:windowIsFloating">false</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

然后你需要为你的布局应用边距,否则它将像普通活动一样全屏。

于 2013-06-24T15:57:33.980 回答
1

我分享这个是因为它可能对其他人有用。我在对话框中遇到了 SurfaceView 的透明度问题,以下答案帮助我解决了它(我不必按照这里的建议使用 windowIsFloating=false 虽然它也可以解决问题):

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

事实证明,我的问题既是 Z 排序问题,也是透明度问题。

于 2014-01-07T07:30:29.670 回答