我正在创建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()的代码只执行一次。
如何使我的应用程序连续播放视频流,当我旋转设备以在布局中制作全屏时,然后在回到肖像时使其正常?
希望有人得到我的意思。 提前谢谢。
答案 0 :(得分: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的限制并在视频视图中设置它。您的视频现在是全屏的。当您将设备置于纵向时,paramsNotFullscreen将恢复以前的值。
<强>更新强>
在清单文件中,您必须在活动声明中添加以下代码以避免活动重启:
android:configChanges="screenLayout|screenSize|orientation"
答案 1 :(得分: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);
}
}