状态栏的工具类(支持多种版本类型)
生活随笔
收集整理的這篇文章主要介紹了
状态栏的工具类(支持多种版本类型)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
這是我根據(jù)手機不同的版本,不同API設(shè)置狀態(tài)欄的幾種方法,總結(jié)了一個工具類,希望對大家有幫助,拿走不謝!!!
public class StatusBarManager {/*** 僅僅讓狀態(tài)欄透明,布局類容位于狀態(tài)下方*/public static void translucentStatusBar(Activity activity) {if (!SystemFacade.hasKitKat()) {return;}//如果系統(tǒng)版本大于API 19 小于 API 小于 API 21if (SystemFacade.hasKitKat() && !SystemFacade.hasLollipop()) {Window window = activity.getWindow();//在 4.4 api 19 和 API 20 添加FLAG_TRANSLUCENT_STATUS 是讓系統(tǒng)狀態(tài)欄為透明,同時系統(tǒng)會自動設(shè)置View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE//所以布局延伸到了狀態(tài)下面window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);} else if (SystemFacade.hasLollipop()) {Window window = activity.getWindow();//添加Flag把狀態(tài)欄設(shè)為可繪制模式window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);//設(shè)置狀態(tài)欄為透明window.setStatusBarColor(Color.TRANSPARENT);}}/*** 改變狀態(tài)欄為透明并讓布局延伸到狀態(tài)底部*/public static void immersive(Activity activity) {if (!SystemFacade.hasKitKat()) {return;}//如果系統(tǒng)版本大于API 19 小于 API 小于 API 21if (SystemFacade.hasKitKat() && !SystemFacade.hasLollipop()) {Window window = activity.getWindow();//在 4.4 api 19 和 API 20 添加FLAG_TRANSLUCENT_STATUS 是讓系統(tǒng)狀態(tài)欄為透明,同時系統(tǒng)會制動設(shè)置View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE//所以布局延伸到了狀態(tài)下面window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);} else if (SystemFacade.hasLollipop()) {Window window = activity.getWindow();//添加Flag把狀態(tài)欄設(shè)為可繪制模式window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);//設(shè)置狀態(tài)欄為透明window.setStatusBarColor(Color.TRANSPARENT);//設(shè)置讓布局延伸到狀態(tài)欄下面window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE| View.SYSTEM_UI_FLAG_FULLSCREEN| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);}}/*** 改變狀態(tài)欄為透明并讓布局延伸到狀態(tài)底部*/public static void translucentStatusBarAndImmersive(Activity activity) {if (!SystemFacade.hasKitKat()) {return;}//如果系統(tǒng)版本大于API 19 小于 API 小于 API 21if (SystemFacade.hasKitKat() && !SystemFacade.hasLollipop()) {Window window = activity.getWindow();//在 4.4 api 19 和 API 20 添加FLAG_TRANSLUCENT_STATUS 是讓系統(tǒng)狀態(tài)欄為透明,同時系統(tǒng)會制動設(shè)置View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE//所以布局延伸到了狀態(tài)下面window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);} else if (SystemFacade.hasLollipop()) {Window window = activity.getWindow();//添加Flag把狀態(tài)欄設(shè)為可繪制模式window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);//設(shè)置狀態(tài)欄為透明window.setStatusBarColor(Color.TRANSPARENT);//設(shè)置讓布局延伸到狀態(tài)欄底部window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);}}/*** 設(shè)置狀態(tài)欄字體為灰色*/public static void lightStatusBar(Activity activity) {if (SystemFacade.hasM()) {int flag = activity.getWindow().getDecorView().getSystemUiVisibility();if ((flag | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR) != flag) { // 如果狀態(tài)欄字體不是灰色activity.getWindow().getDecorView().setSystemUiVisibility(flag ^ View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);}}}/*** 設(shè)置狀態(tài)欄字體為白色*/public static void darkStatusBar(Activity activity) {if (SystemFacade.hasM()) {int flag = activity.getWindow().getDecorView().getSystemUiVisibility();if ((flag | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR) == flag) { // 如果狀態(tài)欄字體不是白色//flag &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;//activity.getWindow().getDecorView().setSystemUiVisibility(flag);activity.getWindow().getDecorView().setSystemUiVisibility(flag ^ View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);}}}/*** 設(shè)置狀態(tài)欄顏色*/public static void setStatusBarColor(Activity activity, int color) {if (!SystemFacade.hasKitKat()) {return;}//如果系統(tǒng)版本大于API 19 小于 API 小于 API 21if (SystemFacade.hasKitKat() && !SystemFacade.hasLollipop()) {Window window = activity.getWindow();//在 4.4 api 19 和 API 20 添加FLAG_TRANSLUCENT_STATUS 是讓系統(tǒng)狀態(tài)欄為透明,同時系統(tǒng)會制動設(shè)置View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE//所以布局延伸到了狀態(tài)下面window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);createOrChangeMockStatusBarColor(activity, color);ViewGroup contentView = activity.getWindow().findViewById(android.R.id.content);View rootView = contentView.getChildAt(0);if (rootView != null) {rootView.setFitsSystemWindows(true);}} else if (SystemFacade.hasLollipop()) {Window window = activity.getWindow();//添加Flag把狀態(tài)欄設(shè)為可繪制模式window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);//設(shè)置狀態(tài)欄顏色window.setStatusBarColor(color);}}/*** 因此底部導(dǎo)航欄,*/public static void hideNavigationBar(Activity activity) {//隱藏虛擬按鍵,并且全屏if (Build.VERSION.SDK_INT < 19) { // lower apiView v = activity.getWindow().getDecorView();v.setSystemUiVisibility(View.GONE);} else {//for new api versions.View decorView = activity.getWindow().getDecorView();// 如果不設(shè)置SYSTEM_UI_FLAG_IMMERSIVE_STICKY ,那么在點擊屏幕時候底部導(dǎo)航欄會彈出,相當(dāng)于View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 不起作用,被清除int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;decorView.setSystemUiVisibility(uiOptions);}}private static final String MOCK_STATUS_BAR_VIEW = "mock_status_bar";private static void createOrChangeMockStatusBarColor(Activity activity, int color) {Window window = activity.getWindow();ViewGroup mDecorView = (ViewGroup) window.getDecorView();View fakeView = mDecorView.findViewWithTag(MOCK_STATUS_BAR_VIEW);if (fakeView != null) {fakeView.setBackgroundColor(color);} else {View mockView = new View(activity);FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, SystemFacade.getScreenHeight(activity));layoutParams.gravity = Gravity.TOP;mockView.setLayoutParams(layoutParams);mockView.setBackgroundColor(color);mockView.setTag(MOCK_STATUS_BAR_VIEW);mDecorView.addView(mockView);}}private boolean isXiaomi(String brand) {return brand.contains("xiaomi");}private boolean isMeizu(String brand) {return brand.contains("meizu");}}?
總結(jié)
以上是生活随笔為你收集整理的状态栏的工具类(支持多种版本类型)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么检查计算机启动程序,如何查看电脑开机
- 下一篇: 医院“移动”不起来软肋在数据安全?