我怎样才能让我的视频视图达到我设备屏幕的一半?

How can i make my video view to half the screen of my device?

我正在使用视频视图和相对布局。该应用只会 运行 处于纵向模式。目前,我正在提供精确的 dps 以获得所需的大小。我想要的是获得布局大小一半的视频视图。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:opencv="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_smile"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="MyActivity">

            <VideoView
                android:id="@+id/videoViewSmile"
                android:layout_width="match_parent"
                android:layout_height="300dp" />

</RelativeLayout>

您可以使用

获取高度和宽度
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
    mScreenWidth = displayMetrics.widthPixels;
    mScreenHeight = displayMetrics.heightPixels;

最简单的方法是放入不可见视图并使用 layout_weights,但我认为这不是正确的方法。我会使用 ViewTreeObserver

    final RelativeLayout layout = (RelativeLayout)findViewById(R.id.your_layout);
    ViewTreeObserver vto = layout.getViewTreeObserver();

    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {

            VideoView videoView = layout.findViewById(R.id.videoViewSmile);
            ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(layout.getWidth(), layout.getHeight() / 2)

            videoView.setLayoutParams(layoutParams);
            videoView.invalidate();

            layout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        }
    });

未测试,但希望您能看到大致的思路

首先,您可以使用名为 DisplayMetricsandroid.Util class 获得高度和宽度:

DisplayMetrics displayMetrics = new DisplayMetrics();

然后将当前显示信息插入声明的 DisplayMetrics :

getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

现在您可以使用以下命令获取屏幕的高度和宽度:

displayMetrics.widthPixels // Width
displayMetrics.heightPixels // Height

它以像素为单位,您可以通过以下方式更改高度:

videoView.getLayoutParams().height = displayMetrics.heightPixels / 2;

尝试使用线性布局的权重功能

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:opencv="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_smile"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="MyActivity">

<VideoView
    android:id="@+id/videoViewSmile"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.5" />

<RelativeLayout
    android:id="@+id/remaining_fifty_percent"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.5">
 </RelativeLayout>

 </LinearLayout>