項目當中有播放視頻監控的需求,並且需要全屏播放的功能,完成之後在此記錄。
其實就是佈局控件和狀態欄的隱藏與現實以及橫豎屏的切換,代碼如下:
//如果豎屏,則設置爲橫屏
if(mActivity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 設置當前activity爲橫屏
//隱藏mainActivity的radiogroup
mActivity.findViewById(R.id.rg_group).setVisibility(View.GONE);
//隱藏佈局控件
rl_title.setVisibility(View.GONE);
rl_managermentName.setVisibility(View.GONE);
btn_video_call.setVisibility(View.GONE);
btn_message.setVisibility(View.GONE);
tv_full.setText("退出全屏");
//隱藏狀態欄
WindowManager.LayoutParams lp = mActivity.getWindow().getAttributes();
lp.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
mActivity.getWindow().setAttributes(lp);
mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
//視頻佈局大小的設置爲全屏
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
rl_firstFragment.setLayoutParams(params); // 使設置好的佈局參數應用到控件rl_firstFragment
}else{
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);// 設置當前activity爲豎屏
//顯示各控件
mActivity.findViewById(R.id.rg_group).setVisibility(View.VISIBLE);
rl_title.setVisibility(View.VISIBLE);
rl_managermentName.setVisibility(View.VISIBLE);
btn_video_call.setVisibility(View.VISIBLE);
btn_message.setVisibility(View.VISIBLE);
tv_full.setText("全屏");
//顯示狀態欄
WindowManager.LayoutParams attr = mActivity.getWindow().getAttributes();
attr.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
mActivity.getWindow().setAttributes(attr);
mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
//視頻大小控件還原
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, DensityUtils.dpTopx(mActivity, 250));
rl_firstFragment.setLayoutParams(params); // 使設置好的佈局參數應用到控件rl_firstFragment
}
還有就是可能推出全屏用戶點擊的是返回鍵。這時候就需要對返回鍵的 處理,代碼如下:
順便帶上雙擊退出程序的功能代碼
private long exitTime=0;
public boolean onKeyDown(int keyCode, KeyEvent event) {
//如果當前爲橫屏
if((getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);// 設置當前activity爲豎屏
//顯示各控件(fragment加載之後,在主activity可以直接find fragment的控件進行操作)
findViewById(R.id.rg_group).setVisibility(View.VISIBLE);
findViewById(R.id.rl_title).setVisibility(View.VISIBLE);
findViewById(R.id.rl_managermentName).setVisibility(View.VISIBLE);
findViewById(R.id.btn_video_call).setVisibility(View.VISIBLE);
findViewById(R.id.btn_message).setVisibility(View.VISIBLE);
TextView tv_full=(TextView)findViewById(R.id.tv_full);
tv_full.setText("全屏");
//顯示狀態欄
WindowManager.LayoutParams attr = getWindow().getAttributes();
attr.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setAttributes(attr);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
//視頻大小控件還原
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, DensityUtils.dpTopx(this, 250));
findViewById(R.id.rl_firstFragment).setLayoutParams(params); // 使設置好的佈局參數應用到控件rl_firstFragment
return false;
}else{
if(keyCode==event.KEYCODE_BACK){
exit();
return false;
}
return super.onKeyDown(keyCode, event);
}
}
public void exit() {
if ((System.currentTimeMillis() - exitTime) > 1500) {
Toast.makeText(getApplicationContext(), "再按一次退出程序",
Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
finish();
MyApplication.getInstance().exit();
}
}