1. 程式人生 > >Android 透明狀態列瞭解使用 及SystemBarTint 解讀

Android 透明狀態列瞭解使用 及SystemBarTint 解讀

正確區分 沉浸式全屏 和透明狀態列

沉浸式全屏模式:隱藏status bar(狀態列)使螢幕全屏,讓Activity接收所有的(整個螢幕的)觸控事件。
透明化系統狀態列:透明化系統狀態列,使得佈局侵入系統欄的後面,必須啟用fitsSystemWindows屬性來調整佈局才不至於被系統欄覆蓋。


基於SystemBarTint  設定透明狀態列的步驟及核心程式碼

1.Android 4.4  API 19之後  可以通過android:windowTranslucentStatus 或FLAG_TRANSLUCENT_STATUS 可以使狀態列透明。使ui佔整個螢幕(除導航欄外)

* <p>When this flag is enabled for a window, it automatically sets
* the system UI visibility flags {@link View#SYSTEM_UI_FLAG_LAYOUT_STABLE} and
* {@link View#SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}.</p>
*/


2.獲取狀態列高度 

private int getActionBarHeight(Context context) {
    int 
result = 0; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { TypedValue tv = new TypedValue(); context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true); result = TypedValue.complexToDimensionPixelSize(tv.data, context.getResources().getDisplayMetrics());
} return result; }
3.自定義一個view 在DecorView 頂部

private void setupStatusBarView(Context context, ViewGroup decorViewGroup) {
    mStatusBarTintView = new View(context);
    LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, mConfig.getStatusBarHeight());
    params.gravity = Gravity.TOP;
    if (mNavBarAvailable && !mConfig.isNavigationAtBottom()) {
        params.rightMargin = mConfig.getNavigationBarWidth();
    }
    mStatusBarTintView.setLayoutParams(params);
    mStatusBarTintView.setBackgroundColor(DEFAULT_TINT_COLOR);
    mStatusBarTintView.setVisibility(View.GONE);
    decorViewGroup.addView(mStatusBarTintView);
}