1. 程式人生 > >Android中關於全屏顯示和返回原始狀態(視訊等方面在橫豎屏切換用到)

Android中關於全屏顯示和返回原始狀態(視訊等方面在橫豎屏切換用到)

注意點:1.在改變全屏與否狀態列的顯示或隱藏時,關於螢幕引數的設定,豎屏切換到橫屏時需要提前設定狀態列隱藏;而橫屏切換到豎屏時需要現用現設,以上設定規則為必要條件。2.橫豎屏切換時,我們最好不要讓Activity重新建立(重新走onCreate方法),而是呼叫onConfigurationChanged方法,這樣就不需要重新走onCreate方法。使用方法:1.配置清單檔案(主要是配置Activity的configChanges引數)
<activity android:name=".activity.ControlActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="false" android:windowSoftInputMode="adjustResize"> </activity>
2.在onConfigurationChanged方法中對橫豎屏進行操作
@Override
public void onConfigurationChanged(Configuration newConfig) {

    if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        // 
當前為橫屏 //動態改變佈局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); }
3.在要改變橫豎屏狀態的地方新增程式碼
@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.實現效果: