使surfaceView全屏显示

时间:2015-06-30 01:26:05

标签: android android-layout android-fragments surfaceview

我有一个播放直播视频的表面视图。当转向风景时,我需要它全屏。我有一个活动,其中包含一个片段,其中包含surfaceView和一个显示其他实时流的gridview。这是片段的布局 -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="1"
 >

<RelativeLayout
    android:id="@+id/guiLayout"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:background="#000"
    android:orientation="vertical"
    android:layout_weight="0.6">
    <FrameLayout
        android:id="@+id/videoLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_margin="0dp">

        <SurfaceView
            android:id="@+id/videoView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:visibility="visible">
        </SurfaceView>

    </FrameLayout>


</RelativeLayout>
<RelativeLayout
    android:id="@+id/layoutGrid"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="0.4"
    android:background="@android:color/white">
    <GridView
        android:id="@+id/gridView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:horizontalSpacing="2dp"
        android:isScrollContainer="false"
        android:numColumns="3"
        android:stretchMode="columnWidth"
        android:verticalSpacing="2dp"
        android:background="@color/transparent"
        android:layout_gravity="center_horizontal|bottom" />


</RelativeLayout>

所以我的onConfigChanged在活动中调用super onConfigChanged,然后调用片段onRotate方法并将其传递给newConfig -

 public void onRotate(Configuration newConfig)
{
    if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
    {
        Log.e(TAG, "CHANGING");
        getView().findViewById(R.id.guiLayout).setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); 
        if(gridView != null)
            gridView.setVisibility(View.GONE);

        getView().findViewById(R.id.layoutGrid).setVisibility(View.GONE);


    }
    else
    {
        Log.e(TAG, "CHANGING PORTRAIT");

        getView().findViewById(R.id.guiLayout).setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT ,0.6f));

        if(gridView != null)
            gridView.setVisibility(View.VISIBLE);
        else
            gridView = (GridView) getView().findViewById(R.id.gridView);


    }

我的想法是,如果我将guiLayout调整为全屏,则其子项应更改为适合,因为它们设置为MATCH_PARENT。但事实并非如此,guilayout调整到全屏,但孩子仍占据原始重量所决定的40%的屏幕。我已经尝试了很多不同的方法让孩子们与他们的父母相匹配但是没有用。对我所做错的任何建议都会非常感激。

1 个答案:

答案 0 :(得分:3)

全屏:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getSupportActionBar().hide();
videoLayout.setBackgroundColor(Color.BLACK);

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

ViewGroup.LayoutParams videoLayoutParams = videoLayout.getLayoutParams();
videoLayoutParams.width = displayMetrics.widthPixels;
videoLayoutParams.height = displayMetrics.heightPixels;

ViewGroup.LayoutParams videoParams = videoView.getLayoutParams();
videoParams.width = displayMetrics.widthPixels;
videoParams.height = displayMetrics.heightPixels;