- 時(shí)間:2017年1月4日
- 設(shè)備:Android 7.0 小米4
- 需求:簡(jiǎn)單實(shí)現(xiàn)沉浸式狀態(tài)欄設(shè)計(jì)
前言
隨著卡片式設(shè)計(jì)在Android系統(tǒng)的上越來(lái)越流行长已,比如現(xiàn)在早已經(jīng)爛大街的沉浸式狀態(tài)欄畜眨,幾乎所有的主流的APP都支持沉浸式狀態(tài)欄,如QQ术瓮、UC瀏覽器等等康聂。所以覺(jué)得有必要學(xué)習(xí)一下,找了點(diǎn)資料胞四,總結(jié)了一下恬汁,未測(cè)試低版本的效果,如果有測(cè)試的話(huà)歡迎反饋一下撬讽。只是簡(jiǎn)單的記錄這一步驟蕊连,更深層次的代碼請(qǐng)?jiān)L問(wèn) http://www.open-open.com/lib/view/open1455584716230.html 這里面的大神寫(xiě)的很詳細(xì)。
實(shí)現(xiàn)效果
Screenshot_20170104-162632.png
- 未進(jìn)行狀態(tài)欄沉浸效果游昼,狀態(tài)欄為黑色的
Screenshot_20170104-161117.png
+注意觀察頂部甘苍,不再是黑黑的狀態(tài)欄了,比原來(lái)好看多了
實(shí)現(xiàn)原理
- 通過(guò)配置標(biāo)志位來(lái)配置狀態(tài)欄透明
- 創(chuàng)建一個(gè)和狀態(tài)欄大小一致的矩形VIew
- 添加到布局中烘豌,并配置
具體代碼
- 創(chuàng)建一個(gè)類(lèi)ImmersiveStatusBar.java 內(nèi)部包含下面兩個(gè)靜態(tài)的方法
- 在Activity中在setContentLayout中载庭,調(diào)用本類(lèi)的setColor即可實(shí)現(xiàn)沉浸式狀態(tài)欄,如
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ImmersiveStatusBar.setColor(this,0x387fb5);
......
}
- setColor()方法
public static void setColor(Activity activity, int color) {
//限制android系統(tǒng)的版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// 設(shè)置狀態(tài)欄透明
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// 生成一個(gè)狀態(tài)欄大小的矩形
View statusView = createStatusView(activity, color);
// 添加 statusView 到布局中
ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
decorView.addView(statusView);
// 設(shè)置根布局的參數(shù)
ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
rootView.setFitsSystemWindows(true);
rootView.setClipToPadding(true);
}
}
- 其中createStatusView()方法代碼如下:
/**
* 生成一個(gè)和狀態(tài)欄大小相同的矩形條
* @param activity 需要設(shè)置的activity
* @param color 狀態(tài)欄顏色值
* @return 狀態(tài)欄矩形條
*/
private static View createStatusView(Activity activity, int color) {
// 獲得狀態(tài)欄高度
int resourceId = activity.getResources().getIdentifier("status_bar_height", "dimen", "android");
int statusBarHeight = activity.getResources().getDimensionPixelSize(resourceId);
// 繪制一個(gè)和狀態(tài)欄一樣高的矩形
View statusView = new View(activity);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight);
statusView.setLayoutParams(params);
statusView.setBackgroundColor(color);
return statusView;
}