Android视频不适合videoview的纵向宽度,且未在横向占据全屏幕

Android视频不适合videoview的纵向宽度,且未在横向占据全屏幕,android,android-layout,fullscreen,android-videoview,portrait,Android,Android Layout,Fullscreen,Android Videoview,Portrait,Android视频在纵向时不适合视频视图的宽度,如何使视频的宽度适合纵向时的视频视图的宽度,以及当我将屏幕方向更改为横向时,我希望视频像youtube应用程序一样填充整个屏幕。纵向时,视频从屏幕的顶部到中间开始,横向时,视频填充整个屏幕。这里是我已经尝试过的,我还添加了完整的链接 您需要有两种不同的布局。一个是肖像画,一个是风景画。 创建两个具有相同名称的xml文件,并将它们放入文件夹“layout land”(用于横向)和“layout port”(用于纵向)中 你可以看看如何处理方向的变

Android视频在纵向时不适合视频视图的宽度,如何使视频的宽度适合纵向时的视频视图的宽度,以及当我将屏幕方向更改为横向时,我希望视频像youtube应用程序一样填充整个屏幕。纵向时,视频从屏幕的顶部到中间开始,横向时,视频填充整个屏幕。这里是我已经尝试过的,我还添加了完整的链接



您需要有两种不同的布局。一个是肖像画,一个是风景画。 创建两个具有相同名称的xml文件,并将它们放入文件夹“layout land”(用于横向)和“layout port”(用于纵向)中

你可以看看如何处理方向的变化。

此布局可使视频视图全屏显示

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent" >
<VideoView android:id="@+id/myvideoview"
         android:layout_width="fill_parent"
         android:layout_alignParentRight="true"
         android:layout_alignParentLeft="true"
         android:layout_alignParentTop="true"
         android:layout_alignParentBottom="true"
         android:layout_height="fill_parent">
  </VideoView>
</RelativeLayout>

对于线性布局我不确定。但是使用relativelayout可以按如下方式执行此操作

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

<VideoView
    android:id="@+id/videoview"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true" >
</VideoView>

//your other xml content 
....
....
....

</RelativeLayout>

//您的其他xml内容
....
....
....
如果你想在视频视图中也填入高度。然后您需要执行以下代码:

<VideoView
    android:id="@+id/videoview"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_alignParentBottom="true">
</VideoView>

//your other xml content 
....
....
....

</RelativeLayout>


//您的其他xml内容
....
....
....

如果有帮助,请告诉我。谢谢。

我的清单android:configChanges=“orientation | keyboardHidden”中有这个,它阻止我的布局栏被识别。如果我决定从清单中删除它,我只能使用您在布局中提供的上述代码。如果您在清单中有此代码,那么您需要自己处理配置更改。在这种情况下,您的活动将调用OnConfiguration Changed()方法。在这里,您可以设置新的内容视图并处理活动中已有的数据。e、 你可以在这里继续你的视频。最近已经投了否决票。请解释投反对票的原因,而不仅仅是投反对票然后离开。如果你认为给出的答案有问题,你应该和那些认为答案正确的人分享你的想法。@3年后我们还在等待。现在已经5年了
  private void fitStretchClick() {
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    retriever.setDataSource(this, Uri.parse(arrayListVideos.get(mPosition).getSongPath()));
    Bitmap bmp = retriever.getFrameAtTime();

    float width = ((float) bmp.getWidth()) / ((float) bmp.getHeight());
    int width2 = getWindowManager().getDefaultDisplay().getWidth();
    int height = getWindowManager().getDefaultDisplay().getHeight();
    float f = (float) width2;
    float f2 = (float) height;
    float f3 = f / f2;
    ViewGroup.LayoutParams layoutParams = mVideoView.getLayoutParams();
    ViewGroup.LayoutParams layoutParams2 = mVideoView.getLayoutParams();
    if (changedNow) {
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mVideoView.getLayoutParams();
        params.width = metrics.widthPixels;
        params.height = metrics.heightPixels;
        params.leftMargin = 0;
        mVideoView.setLayoutParams(params);
        Toast.makeText(this, "Stretch To Screen", Toast.LENGTH_SHORT).show();
        changedNow = false;
        return;
    } else {
        changedNow = true;
        Toast.makeText(this, "Fit To Screen", Toast.LENGTH_SHORT).show();
        if (width > f3) {
            layoutParams.width = width2;
            layoutParams.height = (int) (f / width);
            mVideoView.setLayoutParams(layoutParams);
            return;
        }
        layoutParams.width = (int) (width * f2);
        layoutParams.height = height;
        mVideoView.setLayoutParams(layoutParams);
    }

}
<VideoView
    android:id="@+id/videoview"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_alignParentBottom="true">
</VideoView>

//your other xml content 
....
....
....

</RelativeLayout>
  private void fitStretchClick() {
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    retriever.setDataSource(this, Uri.parse(arrayListVideos.get(mPosition).getSongPath()));
    Bitmap bmp = retriever.getFrameAtTime();

    float width = ((float) bmp.getWidth()) / ((float) bmp.getHeight());
    int width2 = getWindowManager().getDefaultDisplay().getWidth();
    int height = getWindowManager().getDefaultDisplay().getHeight();
    float f = (float) width2;
    float f2 = (float) height;
    float f3 = f / f2;
    ViewGroup.LayoutParams layoutParams = mVideoView.getLayoutParams();
    ViewGroup.LayoutParams layoutParams2 = mVideoView.getLayoutParams();
    if (changedNow) {
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mVideoView.getLayoutParams();
        params.width = metrics.widthPixels;
        params.height = metrics.heightPixels;
        params.leftMargin = 0;
        mVideoView.setLayoutParams(params);
        Toast.makeText(this, "Stretch To Screen", Toast.LENGTH_SHORT).show();
        changedNow = false;
        return;
    } else {
        changedNow = true;
        Toast.makeText(this, "Fit To Screen", Toast.LENGTH_SHORT).show();
        if (width > f3) {
            layoutParams.width = width2;
            layoutParams.height = (int) (f / width);
            mVideoView.setLayoutParams(layoutParams);
            return;
        }
        layoutParams.width = (int) (width * f2);
        layoutParams.height = height;
        mVideoView.setLayoutParams(layoutParams);
    }

}