一走孽、簡(jiǎn)介
沉浸式是android 4.4之后推出的新型手機(jī)屏幕顯示效果,也即菩混,取代了原來手機(jī)狀態(tài)欄和導(dǎo)航欄顯示暗黑效果忿墅,沉浸式可以將二者顏色調(diào)整為與應(yīng)用顏色一樣或者一致,讓應(yīng)用更加美觀沮峡,其實(shí)現(xiàn)方式有三種疚脐,下面看使用方法
二、使用
1邢疙、第一種方式
a棍弄、將狀態(tài)欄和導(dǎo)航欄設(shè)置呈透明色
if (Build.VERSION.SDK_INT >Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
b、在布局中添加屬性
android:fitsSystemWindows="true"
android:clipToPadding="true"
目的是防止標(biāo)題欄與狀態(tài)欄出現(xiàn)重疊而影響效果
2疟游、第二種方式
動(dòng)態(tài)的計(jì)算狀態(tài)欄的高度呼畸,然后把這個(gè)高度設(shè)置成這個(gè)隱藏的布局的高度,便可以實(shí)現(xiàn)
a颁虐、通過反射來獲取狀態(tài)欄的高度
private int getStatusBarHeight() {
try {
Class c = Class.forName("com.android.internal.R$dimen");
Object obj = c.newInstance();
Field field = c.getField("status_bar_height");
int x = Integer.parseInt(field.get(obj).toString());
return getResources().getDimensionPixelSize(x);
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
b蛮原、動(dòng)態(tài)的設(shè)置狀態(tài)欄? 實(shí)現(xiàn)沉浸式狀態(tài)欄
activity中
private void initState() {
//當(dāng)系統(tǒng)版本為4.4或者4.4以上時(shí)可以使用沉浸式狀態(tài)欄
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//透明狀態(tài)欄
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明導(dǎo)航欄
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
LinearLayout linear_bar = (LinearLayout) findViewById(R.id.ll_bar);
linear_bar.setVisibility(View.VISIBLE);
//獲取到狀態(tài)欄的高度
int statusHeight = getStatusBarHeight();
//動(dòng)態(tài)的設(shè)置隱藏布局的高度
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) linear_bar.getLayoutParams();
params.height = statusHeight;
linear_bar.setLayoutParams(params);
}
}
3、第三種方式
使用第三方開源庫? 另绩,方法如下:
a儒陨、添加依賴到module
compile ‘com.readystatesoftware.systembartint:systembartint:1.0.3’
b花嘶、代碼中使用
(1)、布局中
android:fitsSystemWindows="true"
android:clipToPadding="true
(2)activity中
SystemBarTintManager tintManager = new SystemBarTintManager(this);? ? ? ? ?
tintManager.setStatusBarTintEnabled(true);// 激活狀態(tài)欄? ? ? ?
tintManager.setNavigationBarTintEnabled(true);//激活導(dǎo)航欄?? ? ? ? ?
tintManager.setStatusBarTintResource(R.color.mask_tags_1);//給狀態(tài)欄設(shè)置資源? ? ? ? ? ?
tintManager.setNavigationBarTintResource(R.color.mask_tags_1);//給導(dǎo)航欄設(shè)置資源
另:文中只提及4.4(KitKat)以上的用法蹦漠,之下請(qǐng)自行查找椭员。