3

我正在创建 android 应用程序来播放 liveStream,我在 layout.xml 中添加了 videoView 并添加了 layout-land 文件夹

我想让应用程序仅在布局区域而不是纵向中全屏显示视频

所以我在 onCreate() 中添加了以下代码:

public void onConfigurationChanged(Configuration newConfig){
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE
   {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
   } else 
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }
}

但我的问题是,当我旋转设备时,它会重新启动活动,这会导致视频流停止,我想阻止这种情况。所以。我添加以体现这一行

 android:configChanges="keyboard|keyboardHidden|orientation|screenSize"

但这会导致 onCreate() 的代码只执行一次。

如何让我的应用程序连续播放视频流,当我旋转设备以在布局区域中全屏显示,然后回到纵向时使其正常?

希望有人明白我的意思。提前致谢。

4

2 回答 2

12

您应该将您的视频视图(或内容父级)添加为布局文件中的最后一个元素。并使用下一个代码:

private RelativeLayout.LayoutParams paramsNotFullscreen; //if you're using RelativeLatout           

@Override
public void onConfigurationChanged(Configuration newConfig) 
{
    super.onConfigurationChanged(newConfig);


    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) //To fullscreen
    {
        paramsNotFullscreen=(RelativeLayout.LayoutParams)mVideoView.getLayoutParams();
        RelativeLayout.LayoutParams params=new LayoutParams(paramsNotFullscreen);
        params.setMargins(0, 0, 0, 0);
        params.height=ViewGroup.LayoutParams.MATCH_PARENT;
        params.width=ViewGroup.LayoutParams.MATCH_PARENT;
        params.addRule(RelativeLayout.CENTER_IN_PARENT);
        mVideoView.setLayoutParams(params);

    } 
    else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) 
    {
        mVideoView.setLayoutParams(paramsNotFullscreen);
    }
}

它获取 videoview layoutparams 的副本并将其保存在全局变量中。然后使用以前的值创建一个新的 layoutparams 对象,但现在将限制设置为 match_parent 并将其设置在您的视频视图中。您现在的 videoview 是全屏显示。当您将设备置于纵向时,paramsNotFullscreen 会恢复以前的值。

更新:

在您的清单文件中,您必须在 Activity 声明中添加以下代码以避免 Activity 重新启动:

android:configChanges="screenLayout|screenSize|orientation"
于 2012-10-23T15:12:44.380 回答
1

试试这个...

@Override
    public void onConfigurationChanged(Configuration newConfig) 
    {
        super.onConfigurationChanged(newConfig);


        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) 
        {
            setContentView(R.layout.create_job_l);

        } 
        else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
        {
            setContentView(R.layout.create_job_p);

        }
    }
    @Override
    public void onCreate(Bundle savedInstanceState)
    {

        super.onCreate(savedInstanceState);
        if (getResources().getConfiguration().orientation == 1)
        {
            setContentView(R.layout.create_job_p);
        }
        if (getResources().getConfiguration().orientation == 2)
        {
            setContentView(R.layout.create_job_l);
        }


    }
于 2012-10-22T13:00:39.337 回答