android实现系统状态栏的隐藏方法,Android隐藏系统状态栏(沉浸式状态栏)和设置状态栏颜色...
Android 5.0(API 21)之后就可以對系統狀態欄進行設置了,這里我不是想深入討論對系統狀態欄的一些高級設置,因為一般也用不到,我只想說最常見的兩種場景
隱藏系統狀態欄,這就是感覺很牛逼的沉浸式狀態欄
狀態欄顏色變化后狀態欄顯示內容顏色隨之改變
1. 沉浸式狀態欄
這種最簡單,只需要拿到當前activity window的DecorView,然后設置setSystemUiVisibility()即可。
示例:
Window window = activity.getWindow();
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.TRANSPARENT);
}
其實想要沉浸式狀態欄,只需要設置View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN屬性足夠了,其他的只是些通用做法。比如View.SYSTEM_UI_FLAG_LAYOUT_STABLE是設置狀態欄字體顏色還是跟隨系統。window.setStatusBarColor(Color.TRANSPARENT)是設置狀態欄為全透明。
上面代碼的作用就是狀態欄的高度沒有了,但是注意狀態欄的顯示還是有的,就是這樣:
是不是很丑?這時候你的產品經理肯定會不滿意,要你改,我猜他是不是想要這種效果:
如果我猜對了,那么就繼續看吧!
2. 重新設置你的TitleBar
這個解決方法更簡單,就是改變TitleBar的高度和paddingTop,看下面示例就會豁然開朗:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
ViewGroup.LayoutParams params = view.getLayoutParams();
int topMargin = getStatusBarHeight(view.getContext());
params.height = params.height + topMargin;
view.setPadding(view.getPaddingLeft(), view.getPaddingTop() + topMargin, view.getPaddingRight(), view.getPaddingBottom());
view.setLayoutParams(params);
}
這里的view當然就是你的TitleBar,狀態欄的顏色是你的TitleBar的背景色。效果見上圖。
getStatusBarHeight(context)應該不用我說了,不會的話自己百度。
3. 設置狀態欄顯示字體內容顏色
這種場景很常見,比如上面的圖,如果你的TitleBar是白色或者淺色,那么你狀態欄的顯示內容將會看不見,或者很丑。
這個時候你需要改變你狀態欄顯示內容的顏色,只有幾行代碼:
Window window = activity.getWindow();
if (ColorUtils.calculateLuminance(color) >= 0.5) {
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}
color就是你設置的狀態欄顏色,或者說是TitleBar的背景色,但注意這是一個int值,不是resourceId。
ColorUtils.calculateLuminance(color) >= 0.5的作用只是確定這個顏色是亮色還是暗色。
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR是幫你把狀態欄顯示內容變成黑色,而View.SYSTEM_UI_FLAG_LAYOUT_STABLE是跟隨系統。
小結
學會以上三點,你基本可以交差了,但是下面的這種場景你應該還是要知道。
4. 狀態欄著色
可能由于某種特定原因,你可能想給狀態欄設置另外一種顏色,那么這也很簡單:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(getResources().getColor(R.color.your_color));
}
比如下圖我把狀態欄設置成黑色:
總結
以上是生活随笔為你收集整理的android实现系统状态栏的隐藏方法,Android隐藏系统状态栏(沉浸式状态栏)和设置状态栏颜色...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ALM的使用过程及图解
- 下一篇: 常用SQL语句备忘