Android中關於全屏顯示和返回原始狀態(視訊等方面在橫豎屏切換用到)
阿新 • • 發佈:2019-01-28
注意點:1.在改變全屏與否狀態列的顯示或隱藏時,關於螢幕引數的設定,豎屏切換到橫屏時需要提前設定狀態列隱藏;而橫屏切換到豎屏時需要現用現設,以上設定規則為必要條件。2.橫豎屏切換時,我們最好不要讓Activity重新建立(重新走onCreate方法),而是呼叫onConfigurationChanged方法,這樣就不需要重新走onCreate方法。使用方法:1.配置清單檔案(主要是配置Activity的configChanges引數)
6.實現效果:
<activity android:name=".activity.ControlActivity" android:configChanges="orientation|keyboardHidden|screenSize"2.在onConfigurationChanged方法中對橫豎屏進行操作android:exported="false" android:windowSoftInputMode="adjustResize"> </activity>
@Override public void onConfigurationChanged(Configuration newConfig) { if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { //3.在要改變橫豎屏狀態的地方新增程式碼當前為橫屏 //動態改變佈局setOprateVisible(View.VISIBLE); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); surfaceView.setLayoutParams(layoutParams); } else if (this.getResources().getConfiguration().orientation== Configuration.ORIENTATION_PORTRAIT) { // 當前為豎屏 //動態改變佈局 setOprateVisible(View.GONE); //切換為豎屏顯示(提前設定無效,只有現用現設定) int flagBack = WindowManager.LayoutParams.FLAG_FULLSCREEN; //獲得當前窗體物件 Window windowBack = this.getWindow(); //設定當前窗體為全屏顯示 windowBack.clearFlags(flagBack); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); layoutParams.addRule(RelativeLayout.BELOW, R.id.operate_ll); surfaceView.setLayoutParams(layoutParams); } super.onConfigurationChanged(newConfig); }
@Override public void onClick(View view) { switch (view.getId()) {
case R.id.max_img: //橫屏提前設定引數充滿整個螢幕(只有提前設定在橫豎屏切換時才會生效) //定義全屏引數 int flag = WindowManager.LayoutParams.FLAG_FULLSCREEN; //獲得當前窗體物件 Window window = this.getWindow(); //設定當前窗體為全屏顯示 window.setFlags(flag, flag); //改變螢幕方向(設定為橫屏) this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); break;
case R.id.back1_img: //切換豎屏(橫屏頭部返回鍵) this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); break;
} }4.設定當按返回鍵對應的操作(按back鍵,橫屏切換到豎屏,此時是不能銷燬activity的;而豎屏狀態下則會finish掉這個Activity)
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { //按返回鍵 if (keyCode == KeyEvent.KEYCODE_BACK) { // 檢測螢幕的方向:縱向或橫向 if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { //當前為橫屏,切換至豎屏this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { //當前為豎屏,按退出鍵後就結束當前activity finish(); } return true; } return super.onKeyDown(keyCode, event); }5.在橫屏全屏狀態下鎖屏,之後重新點亮,此時會出現全屏的引數設定失效,所以我們應該在onResume方法中重新設定全屏引數
@Override protected void onResume() { super.onResume(); if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { // 當前為橫屏 //切換為豎屏顯示(提前設定無效,只有現用現設定) int flagBack = WindowManager.LayoutParams.FLAG_FULLSCREEN; //獲得當前窗體物件 Window windowBack = this.getWindow(); //設定當前窗體為全屏顯示 windowBack.setFlags(flagBack, flagBack); } }
6.實現效果: