上次說過有時間將會寫一遍關於沉浸式狀態欄的文章,關於沉浸式狀態欄對於有實際開發經驗的程序員來說應該不會陌生,在實際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.4到5.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);
}
上面的代碼可以直接的拷貝到自己的項目中直接用,希望這邊文章對你有所幫助,求關注與贊謝謝!!!!!!!!