2011-10-06 89 views
5

從不全屏到全屏使用Android工作正常。但是,從我的全屏活動(全屏幕視頻播放器)返回後,活動會隨着狀態欄的動畫向下滑動而向下滑動。看起來,恢復活動是從全屏模式動畫的,但狀態欄不在那裏,實際活動正在被繪製,就好像它缺失一樣。從全屏切換到不全屏幕彈出/滑動

我試圖弄亂我的清單文件指定主題/樣式。我曾嘗試這樣做編程中的onCreate()的內容畫面設置前和活動的生命週期不同的其它地方:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 

看來,有沒有辦法保持狀態欄的動畫下降和/或者從沒有狀態欄的第一張圖的內容視圖開始,然後在重新顯示時進行調整。

任何人有任何想法呢?我不確定是否有任何方法可以改變這一點,只是Android的行爲。

在此先感謝。

回答

1

在活動佈局的根視圖添加

機器人:paddingTop = 「25dp」

在活動的onCreate,所述setContentView()之前添加

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); 
2
private void toggleFullscreen(boolean fullscreen) 
{ 
    WindowManager.LayoutParams attrs = getWindow().getAttributes(); 
    if (fullscreen) 
    { 
     attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; 
    } 
    else 
    { 
     attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN; 
    } 
    getWindow().setAttributes(attrs); 
} 

使用它肯定會工作

0

我能夠通過兩個步驟實現這一點。

  1. 使用Theme.AppCompat.Light.NoActionBar在我的風格的活動,我想顯示爲全屏。 。

  2. 使用下面的代碼在活動的onCreate(Bundle savedInstanceState)方法 WindowManager.LayoutParams屬性= getWindow()的getAttributes(); attributes.flags | = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; getWindow()。setAttributes(attributes);

希望這會有所幫助。快樂編碼:)

1

以下是我的解決方案:

顯示系統狀態欄前完成全屏活動

@Override 
public void onBackPressed() { 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 

    mUIHandler.post(new Runnable() { 
     @Override 
     public void run() { 
      MyFullScreenActivity.super.onBackPressed(); 
     } 
    }); 
} 
+0

此解決方案對我更有用,因爲它不會導致原始活動必須調整其佈局填充。 –

0

我不知道這是否會爲你工作,但它的工作對我。 設置全屏活動:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 
setContentView(R.layout.my_screen); 

關閉全屏顯示:

WindowManager.LayoutParams attrs = getWindow().getAttributes(); 
attrs.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; 
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
getWindow().setAttributes(attrs); 
startActivity(new Intent(getBaseContext(),NewActivity.class)); 
finish(); 
1

下面是解決這個問題的最佳方式:super.onCreate(...)你的活動中之前

private void setFullscreen(boolean fullscreen) { 
    WindowManager.LayoutParams attrs = getWindow().getAttributes(); 
    if (fullscreen) { 
     attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; 
     attrs.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; 
     attrs.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; 
    } 
    else { 
     attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN; 
     attrs.flags &= ~WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; 
     attrs.flags &= ~WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; 
    } 
    getWindow().setAttributes(attrs); 
} 

調用此。