toolbar+statusbar基本状态栏标题栏构建

最近要开始一个新的项目,然后旧项目就没有使用toolbar,
就想说用toolbar来构建一个通用标题。
构建了一个activity基类来放置通用的toolbar及其基本方法。下面是部分代码

mCommonToolbar = ButterKnife.findById(this, R.id.common_toolbar);
    titleTv= ButterKnife.findById(this, R.id.titleTv);
    if(mCommonToolbar!=null){
        setupToolbar(mCommonToolbar);
        if(!StringUtil.isEmpty(title))
            setTitleContent(title);
    }
     /**
 * 设置Toolbar成ActionBar
 */
protected void setupToolbar(Toolbar toolbar) {
    if (toolbar != null) {
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);//这边要设置不然会出现appname
    }
}
/** ActionBar显示返回图标 */
protected void showHomeAsUp(@DrawableRes int resId) {
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setHomeAsUpIndicator(resId);
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}



/**
 * 自定义Toolbar的title内容
 */
protected void setTitleContent(String title) {
    if (titleTv != null) {
        titleTv.setVisibility(View.VISIBLE);
        titleTv.setText(title);
    }
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            break;
    }
    return super.onOptionsItemSelected(item);
}

下面是xml代码:




然后这是toolbar代替actionbar所以需要在每个使用toolbar的activity在Manifast设置一个空title的style。


这样就把toolbar代替actionbar给O了。
然后再来配置透明状态栏

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//透明状态栏
        Window window = getWindow();
        // Translucent status bar
        window.setFlags(
                WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
                WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        /**
         * 解决设置透明时输入法导致输入框不可移动问题
         */
        AndroidBug5497Workaround.assistActivity(this);

    }

这样做完toolbar会和状态栏重叠在一起。所以还需要一步操作。
给toolbar设置 android:fitsSystemWindows="true"。
效果:二者重合,且toolbar悬浮在状态栏之后
解决方法:
设置fitsystemWindow属性,该属性的官方文档说明,如下
fitsystemwindow属性,官方文档如下:

Boolean internal attribute to adjust view layout based on system windows such as the status bar. If true, adjusts the padding of this view to leave space for the system windows. Will only take effect if this view is in a non-embedded activity.

Must be a boolean value, either “true” or “false”.

该属性设置为true时,表示view会根据系统栏自动设置Padding值来适配,即为屏幕自动加入padding,使得所有内容都可以显示在主屏上,从而避免toolbar被状态栏所覆盖。

你可能感兴趣的:(toolbar+statusbar基本状态栏标题栏构建)