显示全屏视频时出现问题&改变方向

时间:2012-06-21 13:18:57

标签: android fullscreen android-4.0-ice-cream-sandwich android-videoview orientation-changes

我有一个显示全屏视频的活动(但保持宽高比)。它在Android 2.3.7上完美运行,但我在Android 4上遇到了一些奇怪的问题(可能还有3个,我还没有检查):

  1. 出于某种原因,如果我将主题设置为全屏,没有标题栏(或操作栏),我会在videoView下方获得蓝色(或白色?)渐变,如下所示:

    weird gradient on full screen

    相关布局如下:

    编辑:在android 3上,它不会发生。

  2. 当我将方向从纵向更改为横向时,它会从头开始重新加载整个视频。在Android 2.3.7上,它没有任何延迟地继续,好像什么都没有改变。

  3. 相关的清单部分在这里:

    <activity android:name=".activities.player_activity.PlayerActivity" android:configChanges="keyboardHidden|orientation"
        android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" android:screenOrientation="sensor"/>
    

    请注意,在Android 3上,旋转平板电脑不会执行任何操作,因此不会更改方向。

    我该如何处理这些问题?似乎没有更新API演示来处理这些情况。

    我的项目测试了:nexus one(android 2.3.7),xoom(android 3),galaxy S3(android 4)。


    为了修复1号,我只是改变了没有任何背景的主题。奇怪,这是在设备上的这种方式。不知道在其他Android 4设备上是否像这样。为了创建主题,我在“res / values /”文件夹中创建了一个文件“theme.xml”,并在那里写道:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
      <style name="Theme.FullScreenNobarsNoBackground" parent="@android:style/Theme.Holo.NoActionBar.Fullscreen">
        <item name="android:windowBackground">@null</item>
      </style>
    </resources>
    

    当然我也更新了清单以使用新主题。

2 个答案:

答案 0 :(得分:1)

当您更改设备方向时,Dalvik会杀死活动并创建另一个活动,垃圾收集器会清除所有旧设备。

我建议您强制应用程序保持水平模式,您可以更改活动中的follow属性

<activity android:screenOrientation="landscape" />

如果你想让活动改变方向,你必须处理改变。您可以阅读此文档how to handling runtime changes

答案 1 :(得分:0)

我担心我无法看到你在那张照片上谈论的渐变。但如果它在整个屏幕上,那么这可能是Holo主题的标准背景,你可以使用自定义主题删除它。

对于重新启动旋转,您可以将当前时间保存在onConfigurationChanged(..)中,然后使用VideoView.seekTo(..)将其恢复到代码的相应部分中的正确时间。但是,我不知道为什么会在ICS中发生这种情况,因为您并没有破坏活动。