VideoView不会填满整个屏幕

时间:2013-08-02 16:57:46

标签: android

我正在尝试为我的应用程序播放简短的介绍性视频。由于它是一款游戏,我首先创建了一个主题来隐藏动作栏并全屏显示。

styles.xml:

<style name="AppTheme.NoTitleBar" parent="AppTheme">
    <item name="android:windowNoTitle">true</item>
</style>

<style name="AppTheme.NoTitleBar.Fullscreen" parent="AppTheme.NoTitleBar">
    <item name="android:windowFullscreen">true</item>
</style>

然后,我创建了一个只有VideoView的布局:

activity_main.xml中:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/black"
    tools:context=".MainActivity" >

    <VideoView
        android:id="@+id/videoView_intro"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="0dp" />

</RelativeLayout>

最后,我通过以下代码播放视频:

MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    VideoView v = (VideoView) findViewById(R.id.videoView_intro);
    v.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.intro));
    /* This line had a code snippet for event handling, unrelated to this question */
    v.start();
}

我成功播放了视频,但VideoView底部有一个小的边距。我认为它与通知栏的高度相匹配。我怎样才能摆脱这个边际?

编辑:我不知道是否需要此信息,但该活动被强制为横向。此外,我针对API级别8的所有Android设备,因此解决方案必须与API级别8兼容。

的AndroidManifest.xml:

    <activity
        android:name="org.package.name.MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="landscape"
        android:theme="@style/AppTheme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

3 个答案:

答案 0 :(得分:5)

您最好的选择可能是创建自己的VideoView子类,覆盖onMeasure(int, int)方法并获取屏幕尺寸并修改VideoView高度/宽度以匹配设备的正确高度/宽度。

如果您不希望这样做,那么您可以更容易的其他选项是在全屏对话框中启动视频,或者您可以将LayoutParams设置为在运行时生成的静态大小:

VideoView v = (VideoView) findViewById(R.id.videoView_intro);
v.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.intro));

DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    v.setLayoutParams(new LayoutParams(metrics.widthPixels, metrics.heightPixels));

v.start();

答案 1 :(得分:1)

好吧,当我想出这个想法时,我想我变得傻了。

问题不在于通知栏。相反,它是关于视频的宽高比。

视频大小为480×272。它的纵横比约为。 1.7647。另一方面,Galaxy Nexus的可用屏幕尺寸为1184×720,其纵横比为约。 1.6444。所以,基本上视频比屏幕“更长”。

我没有找到原因,因为: 1)奇怪的是,边缘的高度几乎与通知栏的高度相匹配,并且 2)由于视频是一个屏幕比电话更窄的系统的录音,我不相信这是原因。 (编码器打破了假设的宽高比。)

总而言之,我应该研究的是这篇文章:Center VideoView in landscape mode

教训是,不要过多地考虑你的假设。

答案 2 :(得分:1)

VideoView v = (VideoView) findViewById(R.id.videoView_intro);
v.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.intro));

DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    v.setLayoutParams(new LayoutParams(metrics.widthPixels, metrics.heightPixels));

v.start();`enter code here`

this code worked correctly
相关问题