Toolbar與Translucent System Bar使用及封裝

文章來源:【chenyk的簡(jiǎn)書】http://www.reibang.com/p/527dbe07fd8f

Toolbar 是 Material Design 風(fēng)格中的一個(gè)導(dǎo)航控件 ,Google 也大力推薦大家使用 Toolbar明场,以此來取代先前推出的 Actionbar 验毡。Toolbar不僅包含了ActionBar最近添加的大多數(shù)特性玛痊,同時(shí)添加推出了兼容庫,使得在低版本設(shè)備上也可以使用Toolbar没卸。與 Actionbar 相比泞辐,Toolbar 明顯要靈活的多。它不像 Actionbar 一樣痴柔,一定要固定在Activity的頂部沦偎,而是可以放到界面的任意位置。除此之外咳蔚,在設(shè)計(jì) Toolbar 的時(shí)候扛施,Google也留給了開發(fā)者很多可定制修改的屬性。

Translucent System Bar 其叫法很有歧義屹篓,叫其沉浸式狀態(tài)欄也好,半透明狀態(tài)欄也罷匙奴。怎么開心怎么叫堆巧,在這里暫且稱之為半透明狀態(tài)欄,畢竟目的是讓其改變顏色,改變那千年不變的黑色背景谍肤。

在Android 4.4之后便引入了半透明狀態(tài)欄的概念啦租,此時(shí)狀態(tài)欄最頂層有一層陰影,也就是平時(shí)我們所說的漸變效果荒揣。而在5.0以上谷歌又做了調(diào)整篷角,不僅支持設(shè)置漸變效果,還是支持設(shè)置完全純色的效果系任。

Toolbar
根據(jù)google提供的api恳蹲,這里主要說下toolbar常用的一些可定制的屬性和使用方法,其效果圖如下圖所示:


兼容包支持
Toolbar的使用需要v7包的支持俩滥,需在build.gradle文件中添加如下代碼即可使用嘉蕾,代碼如下:

compile 'com.android.support:appcompat-v7:23.4.0'

toolbar控件添加
新建資源布局文件,添加toolbar控件霜旧。按照以往習(xí)慣错忱,大多數(shù)app的頁面標(biāo)題內(nèi)容會(huì)設(shè)置在標(biāo)題欄的中間位置,然而toolbar控件并沒有提供相關(guān)Api設(shè)置居中的標(biāo)題挂据,這里可以采用以下的方式添加自定義標(biāo)題以清。

    <android.support.v7.widget.Toolbar
        android:id="@+id/tool_bar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:minHeight="?attr/actionBarSize">

        <TextView
            android:id="@+id/toolbar_title_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="自定義"
            android:textColor="#ffffff"
            android:textSize="18sp" />
    </android.support.v7.widget.Toolbar>

注:筆者在toolbar的中間放置了一個(gè)textview,但textview的位置不是一定居中的崎逃,這取決于toolbar給予textview的位置大小掷倔。

屬性定制
1 . navigation button(導(dǎo)航欄圖標(biāo))

 //設(shè)置圖標(biāo)資源
    toolbar.setNavigationIcon(iconRes);

    //點(diǎn)擊事件監(jiān)聽回調(diào) 
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //do something
            }
        });

2 . logo icon(app logo)

toolbar.setLogo(resId);//設(shè)置圖標(biāo)資源

3 . title and subtitle(主標(biāo)題和子標(biāo)題)

     toolbar.setTitle(title);//設(shè)置主標(biāo)題內(nèi)容
     toolbar.setTitle(subtitle);//設(shè)置子標(biāo)題內(nèi)容
     toolbar.setTitleTextColor(color);//設(shè)置主標(biāo)題字體顏色
     toolbar.setSubtitleTextColor(color);//設(shè)置子標(biāo)題字體顏色

4 . action menu(動(dòng)作菜單)

 //設(shè)置menu資源
    toolbar.inflateMenu(R.menu.menu_main);
    //右邊菜單item監(jiān)聽回調(diào)
    toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
             switch (item.getItemId()) {
                case R.id.menu_test:
                    ToastTool.showNativeShortToast(ToolbarActivity.this, "測(cè)試");
                    return true;
                case R.id.menu_search:
                    ToastTool.showNativeShortToast(ToolbarActivity.this, "搜索");
                    return true;
                case R.id.menu_settings:
                    ToastTool.showNativeShortToast(ToolbarActivity.this, "設(shè)置");
                    return true;
                case R.id.menu_check_update:
                    ToastTool.showNativeShortToast(ToolbarActivity.this, "檢查更新");
                    return true;
                case R.id.menu_about:
                    ToastTool.showNativeShortToast(ToolbarActivity.this, "關(guān)于");
                    return true;
                default:
                    return super.onOptionsItemSelected(item);
            }
                }
        });

菜單資源文件menu_main.xml,定義了幾個(gè)動(dòng)作婚脱,其內(nèi)容如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/menu_test"
        android:title="測(cè)試"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/menu_search"
        android:icon="@mipmap/tool_search"
        android:title="搜索"
        app:showAsAction="always" />
    <item
        android:id="@+id/menu_settings"
        android:title="設(shè)置"
        app:showAsAction="never" />
    <item
        android:id="@+id/menu_check_update"
        android:title="檢查更新"
        app:showAsAction="never" />
    <item
        android:id="@+id/menu_about"
        android:title="關(guān)于"
        app:showAsAction="never" />
</menu>

注:action menu共兩部分今魔,一部分為操作欄,另一部分為溢出菜單障贸。這里定義了五個(gè)item選項(xiàng)错森,其中app:showAsAction屬性是用來指定這個(gè)item是放置在操作欄上,還是溢出菜單中篮洁。它的值主要有以下三種:

a. 當(dāng)值為“ifRoom”時(shí)涩维,如果操作欄有空間放置,則item放置在操作欄上袁波,否則放置到溢出菜單中瓦阐。 b. 當(dāng)值為“always”時(shí),item將總是放置在操作欄上篷牌。 c. 當(dāng)值為“never”時(shí)睡蟋,item將總是放置在溢出菜單中。


溢出菜單
溢出菜單

6 . 其他樣式修改
a.背景顏色

toolbar.setBackgroundColor(bgColor);//修改toolbar背景顏色

b.字體顏色和字體大小 通過style.xml資源文件自定義相關(guān)樣式枷颊,即可更改toolbar控件相關(guān)屬性戳杀,代碼如下:

 <!-- toolbar主題樣式 -->
    <style name="ToolbarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">
        <!-- menu中showAsAction設(shè)置為ifRoom和always的item項(xiàng)(即操作欄上)字體顏色 -->
        <item name="actionMenuTextColor">#00ad56</item>
        <!-- menu中showAsAction設(shè)置為ifRoom和always的item項(xiàng)(即操作欄上)字體大小 -->
        <item name="actionMenuTextAppearance">@style/ToolbarMenuTextSize</item>
        <!-- 設(shè)置標(biāo)題该面、menu中所有item字體顏色 -->
        <item name="android:textColorPrimary">@android:color/white</item>
        <!-- 設(shè)置子標(biāo)題字體顏色 -->
        <!--<item name="android:textColorSecondary">#ffad56</item>-->
    </style>

c.溢出菜單背景顏色、字體顏色 通過style.xml資源文件自定義相關(guān)樣式信卡,即可更改toolbar控件相關(guān)屬性隔缀,代碼如下:

<!-- toolbar菜單中showAsAction為ifRoom的item項(xiàng)的文字尺寸 -->
    <style name="ToolbarMenuTextSize" parent="@style/TextAppearance.AppCompat.Menu">
        <item name="android:textSize">16sp</item>
    </style>

    <!-- toolbar標(biāo)題字體樣式 -->
    <style name="ToolbarTitleStyle" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Title">
        <item name="android:textSize">16sp</item>
    </style>

    <!-- toolbar彈出菜單樣式 -->
    <style name="ToolbarPopupTheme" parent="@style/ThemeOverlay.AppCompat">
        <item name="android:colorBackground">#ffffaa</item>
        <item name="android:textColor">#fa4081</item>
        <item name="android:textSize">20sp</item>
    </style>

注:其使用方式為,在toolbar布局中添加如下代碼即可傍菇,不過需要注意的是猾瘸,還需要再根布局中添加代碼xmlns:app="http://schemas.android.com/apk/res-auto"
以下代碼設(shè)置才會(huì)生效。

app:popupTheme="@style/ToolbarPopupTheme" app:subtitleTextAppearance="@style/ToolbarTitleStyle" app:theme="@style/ToolbarTheme" app:titleTextAppearance="@style/ToolbarTitleStyle"

Translucent System Bar
不同版本具有的特點(diǎn)
關(guān)于半透明狀態(tài)欄丢习,在不用的Android版本之間也有著不同的效果牵触。其特點(diǎn)如下所示:
1 . Android 4.4以下不支持半透明狀態(tài)欄效果 2 . Android 4.4以上5.0以下(不包括5.0)可使?fàn)顟B(tài)欄變色,效果為顏色漸變泛领,可設(shè)置透明度 3 . Android5.0以上可使?fàn)顟B(tài)欄變色荒吏,即可設(shè)置漸變效果,亦可讓其顯示純色效果渊鞋,同時(shí)支持透明度設(shè)置

Android 4.4效果圖:


Android 5.0以上效果圖
Android 5.0以上效果
Android 5.0以上效果

下面看下動(dòng)圖的效果绰更,如下所示:
StatusBar效果圖.gif
StatusBar效果圖.gif

代碼實(shí)現(xiàn)
1 . 新建狀態(tài)欄管理類StatusBarManager,定義枚舉類型TintType锡宋,編寫帶四參數(shù)的構(gòu)造方法儡湾,同時(shí)根據(jù)Andorid版本的不同對(duì)窗口進(jìn)行配置

 public enum TintType {
        GRADIENT, PURECOLOR  //漸變,純色   ps:純色效果僅適用于android 5.0以上
    }

    /**
     * 構(gòu)造函數(shù)
     *  @param activity
     * @param tintType
     * @param alpha
     * @param statusBarColor
     */
    private StatusBarManager(Activity activity, TintType tintType, int alpha, int statusBarColor) {
        this.mActivity = activity;
        this.mTintType = tintType;
        this.mAlpha = alpha;
        this.mStatusBarColor = CommTool.getResultColor(mActivity, statusBarColor);
        windowConfig();
    }

    /**
     * 窗口相關(guān)配置
     */
    private void windowConfig() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            //透明狀態(tài)欄
            if (TintType.PURECOLOR == mTintType) {
                mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                mActivity.getWindow().setStatusBarColor(CommTool.calculateColorWithAlpha(mStatusBarColor, mAlpha));//設(shè)置狀態(tài)欄顏色
            } else if (TintType.GRADIENT == mTintType) {
                mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                addStatusBarView(mActivity, CommTool.calculateColorWithAlpha(mStatusBarColor, mAlpha));
            }
            //透明底部導(dǎo)航欄
//            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            addStatusBarView(mActivity, CommTool.calculateColorWithAlpha(mStatusBarColor, mAlpha));
        }
    }
注:4.4以上需要自己繪制一個(gè)與狀態(tài)欄同高的矩形條执俩,并通過addview的方法添加至屏幕上徐钠,同時(shí)設(shè)置其背景顏色達(dá)到預(yù)期的效果。而5.0以上api中提供了setStatusBarColor(int color)的方法可直接設(shè)置狀態(tài)的顏色役首。

2 . 新建StatusBarView視圖類尝丐,主要生成一個(gè)與狀態(tài)欄同等大小的視圖并添加至頂部和顏色的設(shè)置,代碼如下:

    /**
     * 生成一個(gè)和狀態(tài)欄大小相同的矩形條
     *
     * @return 狀態(tài)欄矩形條
     */
    private static StatusBarView createStatusBarView(Activity activity, int color) {
        StatusBarView statusBarView = new StatusBarView(activity);
        statusBarView.setLayoutParams(new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT, CommTool.getStatusBarHeight(activity)));
        statusBarView.setBackgroundColor(color);
        return statusBarView;
    }

    /**
     * 添加狀態(tài)欄
     *
     * @param activity
     * @param color
     */
    public static void addStatusBarView(Activity activity, int color) {
        ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
        if (decorView.getChildAt(0) instanceof StatusBarView) {
            decorView.getChildAt(0).setBackgroundColor(color);
        } else {
            StatusBarView statusView = createStatusBarView(activity, color);
            decorView.addView(statusView);
        }
    }

3 . 定義builder配置內(nèi)部類衡奥,根據(jù)實(shí)際情況對(duì)狀態(tài)欄屬性進(jìn)行自由組裝爹袁,代碼如下:

  /**
     * builder配置類
     */
    public static class builder {
        private static final int DEFAULT_ALPHA = 60;  //默認(rèn)透明度數(shù)值
        private Activity activity;
        private TintType tintType = TintType.PURECOLOR;  //默認(rèn)純色效果
        private int alpha = DEFAULT_ALPHA;
        private int statusBarColor;

        /**
         * 構(gòu)造方法
         *
         * @param activity
         */
        public builder(Activity activity) {
            this.activity = activity;
        }

        /**
         * 設(shè)置色彩類型
         *
         * @param tintType
         * @return
         */
        public builder setTintType(TintType tintType) {
            this.tintType = tintType;
            return this;
        }

        /**
         * 設(shè)置透明度
         *
         * @param alpha
         * @return
         */
        public builder setAlpha(int alpha) {
            if (alpha >= 0 & alpha <= 255)
                this.alpha = alpha;
            return this;
        }

        /**
         * 設(shè)置狀態(tài)欄背景顏色
         *
         * @param StatusBarColor
         * @return
         */
        public builder setStatusBarColor(int StatusBarColor) {
            this.statusBarColor = StatusBarColor;
            return this;
        }

        /**
         * 創(chuàng)建StatusBarManager對(duì)象并返回
         *
         * @return
         */
        public StatusBarManager create() {
            return new StatusBarManager(activity, tintType, alpha, statusBarColor);
        }
    }

最后通過鏈?zhǔn)秸{(diào)用的方式自由組裝配置,支持純色和漸變效果設(shè)置矮固、支持設(shè)置透明度等失息,調(diào)用方式如下代碼所示:

new StatusBarManager.builder(this)
                .setStatusBarColor(mStatusBarColor)//狀態(tài)欄顏色
                .setTintType(mTintType)//色彩類型:純色、漸變
                .setAlpha(mAlpha)//不透明度
                .create();

注:最終效果展示時(shí)档址,會(huì)發(fā)現(xiàn)布局內(nèi)容已浸入到狀態(tài)欄中盹兢,這是個(gè)需要注意的地方,我們只需在布局文件的根布局中添加android:fitsSystemWindows="true"
即可守伸。當(dāng)然如果把圖片當(dāng)背景的話绎秒,可將其設(shè)置為false,這個(gè)視情況而定尼摹。

關(guān)于toolbar和Translucent System Bar就介紹到這里,下面是將兩者進(jìn)行配套使用,并進(jìn)行了封裝,以便在以后的開發(fā)過程中快速調(diào)用替裆。

1 . 新建base_activity_layout.xml資源布局文件校辩,頁面由toolbar和正文內(nèi)容兩部分組成,代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/base_ll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/tool_bar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:minHeight="?attr/actionBarSize"
        app:popupTheme="@style/ToolbarPopupTheme"
        app:subtitleTextAppearance="@style/ToolbarTitleStyle"
        app:theme="@style/ToolbarTheme"
        app:titleTextAppearance="@style/ToolbarTitleStyle">
        <TextView
            android:id="@+id/toolbar_title_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="自定義"
            android:textColor="#ffffff"
            android:textSize="18sp" />
    </android.support.v7.widget.Toolbar>

    <FrameLayout
        android:id="@+id/base_content"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#ffffff" />
</LinearLayout>

2 . 新建基類BaseActivtiy辆童,主要提供的功能有:

a . Navigation Button監(jiān)聽回調(diào),這里默認(rèn)操作為返回并銷毀當(dāng)前頁面惠赫。如需定義其他操作把鉴,則callbackOnClickNavigationAction(View v)方法即可

     //左邊Navigation Button監(jiān)聽回調(diào)
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                callbackOnClickNavigationAction(v);
            }
        });

    /**
     * Navigation Button點(diǎn)擊回調(diào),默認(rèn)回退銷毀頁面儿咱,其他操作子類可重寫
     *
     * @param view
     */
    protected void callbackOnClickNavigationAction(View view) {
        onBackPressed();
    }

b . Action menu布局添加以及監(jiān)聽回調(diào)庭砍,默認(rèn)無menu選項(xiàng)

 //右邊菜單item監(jiān)聽回調(diào)
        toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                return callbackOnMenuAction(item);
            }
        });
        /**
         * menu點(diǎn)擊回調(diào),默認(rèn)無混埠,子類可重寫
         *
         * @param item
         * @return
         */
        protected boolean callbackOnMenuAction(MenuItem item) {
            return false;
        }
        /**
         * 為toolbar設(shè)置menu項(xiàng)
         */
        private void setInflateMenu() {
            if (getMenuLayoutId() > 0)
                toolbar.inflateMenu(getMenuLayoutId());
        }

c . 各種set操作怠缸,如標(biāo)題、子標(biāo)題钳宪、自定義標(biāo)題字體顏色設(shè)置揭北、圖標(biāo)設(shè)置、menu布局設(shè)置等

/**
     * 為toolbar設(shè)置menu項(xiàng)
     */
    private void setInflateMenu() {
        if (getMenuLayoutId() > 0)
            toolbar.inflateMenu(getMenuLayoutId());
    }


    /**
     * 設(shè)置主標(biāo)題
     *
     * @param object
     */
    public void setMainTitle(Object object) {
        toolbar.setTitle(CommTool.getResultString(this, object));
    }

    /**
     * 設(shè)置子類標(biāo)題
     *
     * @param object
     */
    public void setSubTitle(Object object) {
        toolbar.setSubtitle(CommTool.getResultString(this, object));
    }

    /**
     * 設(shè)置主標(biāo)題字體顏色
     *
     * @param object
     */
    public void setMainTitleColor(Object object) {
        toolbar.setTitleTextColor(CommTool.getResultColor(this, object));
    }

    /**
     * 設(shè)置子標(biāo)題字體顏色
     *
     * @param object
     */
    public void setSubTitleColor(Object object) {
        toolbar.setSubtitleTextColor(CommTool.getResultColor(this, object));
    }

    /**
     * 設(shè)置logoIcon
     *
     * @param resId
     */

    public void setLogoIcon(int resId) {
        toolbar.setLogo(resId);
    }

    /**
     * 設(shè)置中間標(biāo)題
     *
     * @param object
     */
    public void setToolbarTitleTv(Object object) {
        toolbarTitleTv.setText(CommTool.getResultString(this, object));
    }

    /**
     * 設(shè)置標(biāo)題欄背景顏色
     *
     * @param color
     */
    protected void setTitleBgColor(int color) {
        toolbar.setBackgroundColor(CommTool.getResultColor(this, color));
        //狀態(tài)欄背景相關(guān)配置
        new StatusBarManager.builder(this)
                .setStatusBarColor(color)
                .create();
    }

    /**
     * 設(shè)置左邊標(biāo)題圖標(biāo)
     *
     * @param iconRes
     */
    public void setTitleNavigationIcon(int iconRes) {
        toolbar.setNavigationIcon(iconRes);
    }

d . 根據(jù)實(shí)際情況隱藏toolbar吏颖、獲取toolbar控件設(shè)置屬性

    /**
     * 隱藏標(biāo)題欄
     */
    protected void hideToolbar() {
        if (toolbar.getVisibility() == View.VISIBLE)
            toolbar.setVisibility(View.GONE);
    }
    /**
     * 獲取toolbar
     *
     * @return
     */
    public Toolbar getToolbar() {
        return toolbar;
    }

3 . 調(diào)用方法

a . 子類繼承BaseActivity基類搔体,實(shí)現(xiàn)抽象方法getContentViewID()和initViews() b . 根據(jù)實(shí)際情況設(shè)置相關(guān)屬性,如標(biāo)題半醉、導(dǎo)航圖標(biāo)等 c . 如果需要設(shè)置action menu疚俱,則重寫方法getMenuLayoutId()返回menu布局即可,item點(diǎn)擊回調(diào)缩多,只要重寫方法callbackOnMenuAction(MenuItem item)并返回true值即可呆奕。 d . 透明狀態(tài)欄默認(rèn)純色半透明,如需修改可通過setTitleBgColor(int color)修改衬吆,或者調(diào)用狀態(tài)欄管理類梁钾,通過鏈試調(diào)用的方式對(duì)狀態(tài)欄進(jìn)行配置

BaseActivity完整代碼

/**
 * Created by chenyk on 2016/6/25.
 * 頁面基類
 * 默認(rèn):顯示toolbar,標(biāo)題居中咆槽,Navigation Button點(diǎn)擊返回銷毀當(dāng)前頁面陈轿,無menu菜單(可自行定義)
 */
public abstract class BaseActivity extends AppCompatActivity {
    private FrameLayout baseContent;
    private Toolbar toolbar;
    private TextView toolbarTitleTv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.base_activity_layout);
        initControlViews();
    }

    /**
     * 控件初始化操作
     */
    private void initControlViews() {
        baseContent = (FrameLayout) findViewById(R.id.base_content);
        toolbar = (Toolbar) findViewById(R.id.tool_bar);
        toolbarTitleTv = (TextView) findViewById(R.id.toolbar_title_tv);

        //設(shè)置相關(guān)默認(rèn)操作
        setTitleNavigationIcon(R.mipmap.icon_title_back);
        setTitleBgColor(R.color.base_title_color);

        setInflateMenu();

        baseContent.addView(LinearLayout.inflate(this, getContentViewID(), null));
        initViews();
        //左邊Navigation Button監(jiān)聽回調(diào)
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                callbackOnClickNavigationAction(v);
            }
        });
        //右邊菜單item監(jiān)聽回調(diào)
        toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                return callbackOnMenuAction(item);
            }
        });
    }

    /**
     * 為toolbar設(shè)置menu項(xiàng)
     */
    private void setInflateMenu() {
        if (getMenuLayoutId() > 0)
            toolbar.inflateMenu(getMenuLayoutId());
    }

    /**
     * 獲取菜單資源id,默認(rèn)無秦忿,子類可重寫
     *
     * @return
     */
    protected int getMenuLayoutId() {
        return 0;
    }

    /**
     * 獲取toolbar
     *
     * @return
     */
    public Toolbar getToolbar() {
        return toolbar;
    }

    /**
     * 設(shè)置主標(biāo)題
     *
     * @param object
     */
    public void setMainTitle(Object object) {
        toolbar.setTitle(CommTool.getResultString(this, object));
    }

    /**
     * 設(shè)置子類標(biāo)題
     *
     * @param object
     */
    public void setSubTitle(Object object) {
        toolbar.setSubtitle(CommTool.getResultString(this, object));
    }

    /**
     * 設(shè)置主標(biāo)題字體顏色
     *
     * @param object
     */
    public void setMainTitleColor(Object object) {
        toolbar.setTitleTextColor(CommTool.getResultColor(this, object));
    }

    /**
     * 設(shè)置子標(biāo)題字體顏色
     *
     * @param object
     */
    public void setSubTitleColor(Object object) {
        toolbar.setSubtitleTextColor(CommTool.getResultColor(this, object));
    }

    /**
     * 設(shè)置logoIcon
     *
     * @param resId
     */

    public void setLogoIcon(int resId) {
        toolbar.setLogo(resId);
    }

    /**
     * 設(shè)置中間標(biāo)題
     *
     * @param object
     */
    public void setToolbarTitleTv(Object object) {
        toolbarTitleTv.setText(CommTool.getResultString(this, object));
    }

    /**
     * 設(shè)置標(biāo)題欄背景顏色
     *
     * @param color
     */
    protected void setTitleBgColor(int color) {
        toolbar.setBackgroundColor(CommTool.getResultColor(this, color));
        //狀態(tài)欄背景相關(guān)配置
        new StatusBarManager.builder(this)
                .setStatusBarColor(color)
                .create();
    }

    /**
     * 設(shè)置左邊標(biāo)題圖標(biāo)
     *
     * @param iconRes
     */
    public void setTitleNavigationIcon(int iconRes) {
        toolbar.setNavigationIcon(iconRes);
    }

    /**
     * 隱藏標(biāo)題欄
     */
    protected void hideToolbar() {
        if (toolbar.getVisibility() == View.VISIBLE)
            toolbar.setVisibility(View.GONE);
    }

    /**
     * 不顯示 NavigationButton
     */
    public void hideTitleNavigationButton() {
        toolbar.setNavigationIcon(null);
    }

    /**
     * Navigation Button點(diǎn)擊回調(diào)麦射,默認(rèn)回退銷毀頁面,其他操作子類可重寫
     *
     * @param view
     */
    protected void callbackOnClickNavigationAction(View view) {
        onBackPressed();
    }

    /**
     * menu點(diǎn)擊回調(diào)灯谣,默認(rèn)無潜秋,子類可重寫
     *
     * @param item
     * @return
     */
    protected boolean callbackOnMenuAction(MenuItem item) {
        return false;
    }

    /**
     * 獲取布局資源ID
     *
     * @return
     */
    public abstract int getContentViewID();


    /**
     * 控件初始化操作
     *
     * @return
     */
    public abstract void initViews();
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市胎许,隨后出現(xiàn)的幾起案子峻呛,更是在濱河造成了極大的恐慌罗售,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钩述,死亡現(xiàn)場(chǎng)離奇詭異寨躁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)牙勘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門职恳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人方面,你說我怎么就攤上這事放钦。” “怎么了恭金?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵操禀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我横腿,道長(zhǎng)颓屑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任蔑水,我火速辦了婚禮邢锯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搀别。我一直安慰自己丹擎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布歇父。 她就那樣靜靜地躺著蒂培,像睡著了一般。 火紅的嫁衣襯著肌膚如雪榜苫。 梳的紋絲不亂的頭發(fā)上护戳,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音垂睬,去河邊找鬼媳荒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛驹饺,可吹牛的內(nèi)容都是我干的钳枕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼赏壹,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鱼炒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蝌借,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤昔瞧,失蹤者是張志新(化名)和其女友劉穎指蚁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體自晰,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凝化,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缀磕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缘圈。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖袜蚕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绢涡,我是刑警寧澤牲剃,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站雄可,受9級(jí)特大地震影響凿傅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜数苫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一聪舒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧虐急,春花似錦箱残、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至敬惦,卻和暖如春盼理,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背俄删。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工宏怔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畴椰。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓臊诊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親迅矛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妨猩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容