沉浸式狀態欄適配不同的版本

   上次說過有時間將會寫一遍關於沉浸式狀態欄的文章,關於沉浸式狀態欄對於有實際開發經驗的程序員來說應該不會陌生,在實際app開發中這需求十分的遍佈,但是能用好也是對app功能效果上的一種提升.那現在我就切合我實際的開發經驗來談談自己開發中遇到的坑,解決好不同版本的適配的問題.

   先帖代碼在慢慢的分析:

  這個方法在onCreat()方法中調用,也可以在baseActivity中調用

private void initWindows() {
    Window window = getWindow();
    //這裏是自己定義狀態欄的顏色
    int color = getResources().getColor(R.color.colorPrimary);
 
    ViewGroup contentView = ((ViewGroup) findViewById(android.R.id.content));
    View childAt = contentView.getChildAt(0);
    if (childAt != null) {
      // 設置內容佈局充滿屏幕
        childAt.setFitsSystemWindows(true);
    }
    // 5.0及以上
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(color);
        // 4.45.0
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        // 透明狀態欄
        window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        View view = new View(this);
        view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(this)));
        view.setBackgroundColor(color);
        contentView.addView(view);
    }
}

/**
 * 獲取狀態欄高度
 *
 * @param context context
 * @return 狀態欄高度
 */
private static int getStatusBarHeight(Context context) {
    int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
    return context.getResources().getDimensionPixelSize(resourceId);
}

   上面的代碼可以直接的拷貝到自己的項目中直接用,希望這邊文章對你有所幫助,求關注與贊謝謝!!!!!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章