toolbar+statusbar基本狀態(tài)欄標題欄構建

最近要開始一個新的項目,然后舊項目就沒有使用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);//這邊要設置不然會出現(xiàn)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代碼:

<android.support.v7.widget.Toolbar
    android:id="@+id/common_toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:minHeight="?attr/actionBarSize"
    android:fitsSystemWindows="true"
    >
</android.support.v7.widget.Toolbar>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/titleTv"
    android:textSize="@dimen/sp_20"
    android:layout_centerInParent="true"
    android:gravity="center"
    android:textColor="@android:color/white"
    android:visibility="gone"/>

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

<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
這樣就把toolbar代替actionbar給O了。
然后再來配置透明狀態(tài)欄

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//透明狀態(tài)欄
        Window window = getWindow();
        // Translucent status bar
        window.setFlags(
                WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
                WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        /**
         * 解決設置透明時輸入法導致輸入框不可移動問題
         */
        AndroidBug5497Workaround.assistActivity(this);

    }

這樣做完toolbar會和狀態(tài)欄重疊在一起。所以還需要一步操作。
給toolbar設置 android:fitsSystemWindows="true"。
效果:二者重合,且toolbar懸浮在狀態(tài)欄之后
解決方法:
設置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會根據(jù)系統(tǒng)欄自動設置Padding值來適配,即為屏幕自動加入padding,使得所有內容都可以顯示在主屏上,從而避免toolbar被狀態(tài)欄所覆蓋。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容