Android视频在纵向时不适合视频的宽度,如何在纵向时使我的视频宽度适合我的视频宽度,当我将屏幕的方向更改为横向我希望视频时像youtube应用程序一样填满整个屏幕。当在纵向时,视频将从屏幕的顶部开始到中间,并且在横向时用于填充整个屏幕。这是我尝试过的,我还添加了完整screenshot
的链接<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:weightSum="100" >
<VideoView
android:id="@+id/videoview"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_weight="53" >
</VideoView>
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="7"
android:background="@drawable/top_bar"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/settings"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="5dp"
android:paddingTop="5dp" >
<ImageView
android:id="@+id/set"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc"
android:src="@drawable/settings" />
</LinearLayout>
<LinearLayout
android:id="@+id/low_tab"
android:layout_width="70dp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="5dp"
android:paddingTop="5dp" >
<ImageView
android:id="@+id/low"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc"
android:src="@drawable/low" />
</LinearLayout>
<LinearLayout
android:id="@+id/high_tab"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="5dp"
android:paddingTop="5dp" >
<ImageView
android:id="@+id/high"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc"
android:src="@drawable/high" />
</LinearLayout>
<LinearLayout
android:id="@+id/audio_tab"
android:layout_width="70dp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="5dp"
android:paddingTop="5dp" >
<ImageView
android:id="@+id/audio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc"
android:src="@drawable/audio" />
</LinearLayout>
<LinearLayout
android:id="@+id/full_screen"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="5dp"
android:paddingTop="5dp" >
<ImageView
android:id="@+id/full"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc"
android:src="@drawable/full" />
</LinearLayout>
<LinearLayout
android:id="@+id/fresh"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="5dp"
android:paddingTop="5dp" >
<ImageView
android:id="@+id/refresh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc"
android:src="@drawable/refresh" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="7"
android:background="@drawable/comment_bar"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/liveblog_tab"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:background="@drawable/select"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="5dp"
android:paddingTop="5dp" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc"
android:src="@drawable/live_blog" />
</LinearLayout>
<LinearLayout
android:id="@+id/addcom_tab"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:background="@drawable/select"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="5dp"
android:paddingLeft="15dp"
android:paddingTop="5dp" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc"
android:src="@drawable/add_comment" />
</LinearLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/frame"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="33" >
<LinearLayout
android:id="@+id/liveblog"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<WebView
android:id="@+id/browser"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</WebView>
</LinearLayout>
<LinearLayout
android:id="@+id/comments"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</LinearLayout>
</FrameLayout>
</LinearLayout>
答案 0 :(得分:12)
您需要有两种不同的布局。一个用于肖像,一个用于景观。 创建两个具有相同名称的xml文件,并将它们放入文件夹“layout-land”用于横向和“layout-port”用于纵向。
Here 您可以查看如何处理方向更改。
这可以是使视频全屏显示的布局。
<?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>
编辑:这是你如何在方法中处理它。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
setContentView(Your Landscape layout);
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
setContentView(Your portrait layout);
}
}
答案 1 :(得分:1)
对于 linearlayout ,我不确定。但是使用 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>
如果您希望 videoview 也填充高度。那么你需要做这个代码:
<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>
如果有帮助,请告诉我。感谢。
答案 2 :(得分:0)
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);
}
}