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