2015-03-31 43 views
9

我在嘗試向狀態欄添加顏色時發現影響相對佈局高度的問題。「FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS」影響getRootView()。getHeight()

adding Flag受影響的計算相對佈局rootView的高度。

private void changeStatusBarColor(){ 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      Window window = getWindow(); 
      window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
      window.setStatusBarColor(getResources().getColor(R.color.red_e31837)); 
     } 
    } 

我有一個視圖樹觀察者,幫助我跟蹤rootView的高度。

private ViewTreeObserver.OnGlobalLayoutListener keyboardLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 

      int heightDiff = wrapper.getRootView().getHeight() - wrapper.getHeight(); 
} 

int heightDiff等於1920,如果我用FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS但如果我不使用changeStatusBarColor()int heightDiff等於1776(無動作條計算和狀態我猜)。 但爲什麼添加此標誌會改變計算? 在此先感謝!

+1

如果您通過該標誌,窗口管理器會爲您提供額外的空間來繪製系統欄區域。你不需要傳入該標誌來設置狀態欄的顏色,你只需要調用'setStatusBarColor(int)'。 – alanv 2015-04-01 16:47:09

+1

@alanv謝謝我明白了理由;但如果我不使用標誌,狀態欄顏色不會改變。我在工作開始時就試過了。你知道爲什麼會發生嗎? – MiloRambaldi 2015-04-01 17:56:36

+0

@MiloRambaldi,嗨!你解決這個問題嗎? – BArtWell 2015-07-06 06:46:50

回答

3

在我的情況下,問題發生在SlidingMenu庫中。這是一個solution

+1

非常感謝。它也適用於AndroidResideMenu庫。 [Here](http://stackoverflow.com/questions/28952210/android-residemenu-library-bottom-of-fragment-has-cropping-issue)是我所做的類似解決方案。 – MiloRambaldi 2015-07-07 14:24:30