沉浸式状态栏(一)
需要操作的Activity中添加如下方法:
private void initStatusBar() {
//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
}
需要操作的Activity根布局下,最上方的控件中添加如下属性:
android:fitsSystemWindows="true"
android:clipToPadding="true"
沉浸式状态栏(二)
动态的获取状态栏高度,根布局下给布局动态设置高度:
private void initStatusBar() {
//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
//
LinearLayout linear_bar = (LinearLayout) findViewById(R.id.ll_status_bar);
linear_bar.setVisibility(View.VISIBLE);
//获取到状态栏的高度
int statusHeight = getStatusBarHeight();
//动态的设置隐藏布局的高度
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) linear_bar.getLayoutParams();
params.height = statusHeight;
linear_bar.setLayoutParams(params);
}
}
/**
* 获取系统状态栏高度
*/
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;
}
为Activity布局添加隐藏的布局,设置控件相应的背景色:
<LinearLayout
android:id="@+id/ll_status_bar"
android:layout_width="fill_parent"
android:layout_height="1dp"
android:orientation="vertical"
android:background="@color/translucent"
android:visibility="gone">
</LinearLayout>
沉浸式状态栏(三)
第三方库:SystemBarTint
https://github.com/jgilfelt/SystemBarTint
注意
Android状态栏文字图标为白色,如果沉浸背景是浅色的,会导致系统状态栏的文字图标看不清楚,目前只有只有小米的MIUI、魅族的Flyme和Android6.0以上系统可以把状态栏文字和图标换成深色
解决办法:使用第二种方式,填充的布局背景色使用半透明颜色(并不完美)