我在嘗試向狀態欄添加顏色時發現影響相對佈局高度的問題。「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(無動作條計算和狀態我猜)。 但爲什麼添加此標誌會改變計算? 在此先感謝!
如果您通過該標誌,窗口管理器會爲您提供額外的空間來繪製系統欄區域。你不需要傳入該標誌來設置狀態欄的顏色,你只需要調用'setStatusBarColor(int)'。 – alanv 2015-04-01 16:47:09
@alanv謝謝我明白了理由;但如果我不使用標誌,狀態欄顏色不會改變。我在工作開始時就試過了。你知道爲什麼會發生嗎? – MiloRambaldi 2015-04-01 17:56:36
@MiloRambaldi,嗨!你解決這個問題嗎? – BArtWell 2015-07-06 06:46:50