首先设置状态栏透明 super.onCreate之后调用
protected void requestTranslucentStatusBar() {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
window.setNavigationBarColor(Color.TRANSPARENT);
}
注意不要设置android:fitsSystemWindows="true" 或 setFitsSystemWindows(true)
不然根布局就填充了状态栏(约等于paddingTop="状态栏高度")
如果设置了就会是这样 根布局占用状态栏 而不是标题栏(原谅咱可爱的状态栏)
布局代码就不贴了 不难写
设置完状态栏透明就可以适配标题栏了 也不麻烦我已经写好了
/**
* 标题适配状态栏 在进行此设置前需要将当前Activity的状态栏设置为透明
*
* @param titleBar 标题布局
*/
public static void titleBarAdaptsToStatusBar(ViewGroup titleBar) {
Context context = titleBar.getContext();
//获取状态栏高度
int statusHeight = 0;
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
statusHeight = context.getResources().getDimensionPixelSize(resourceId);
}
//适配高度
ViewGroup.LayoutParams params = titleBar.getLayoutParams();
params.height += statusHeight;
//模拟setFitsSystemWindows(ture)
titleBar.setPadding(titleBar.getPaddingLeft(),
titleBar.getPaddingTop() + statusHeight,
titleBar.getPaddingRight(),
titleBar.getPaddingBottom());
}
调用
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.root_layout);
//状态栏透明
requestTranslucentStatusBar();
//标题栏适配状态栏
ViewUtils.titleBarAdaptsToStatusBar(findViewById(R.id.setting_title_bar));
initView();
}
好了 效果图