布局篇二:Toolbar的使用

布局參數(shù)的使用:

一前塔、Toolbar的基本用例

  1. mToolBar.setNavigationOnclickListener(); //用于設(shè)置左上角導(dǎo)航圖標(biāo)的點(diǎn)擊事件
  2. mToolbar.inflateMenu(R.menu.toolbar_menu); // 右邊menu數(shù)據(jù)
  3. mToolbar.setOnMenuItemClickListener(); // 點(diǎn)擊菜單item的響應(yīng)事件
  4. 注意:
  • 使用時(shí)候需要修改為無actionBar主題,否則會出現(xiàn)問題;
 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
  • 必須使用V7包下的Toolbar,同時(shí)繼承支持Toolbar的AppCompatActivity,否則可能如setSupportActionBar方法可能使用不了。
 <android.support.v7.widget.Toolbar
            android:id="@+id/tool_bar"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:minHeight="?attr/actionBarSize"
            android:background="@color/colorPrimary"
            android:gravity="center_horizontal"
            android:theme="@style/AlertDialog.AppCompat.Light"
            app:logo="@mipmap/ic_launcher" //圖標(biāo)
            app:navigationIcon="@drawable/arrow_back_black_18x18" //左上角導(dǎo)航圖標(biāo)顏色
            app:popupTheme="@style/toolBar_pop_item" 
            app:subtitle="副標(biāo)題" //副標(biāo)題
            app:subtitleTextColor="#fff" //副標(biāo)題顏色
            app:title="標(biāo)題" //標(biāo)題
            app:titleTextColor="#fff"  //標(biāo)題顏色/>
            
 <!--toolBar_pop_item--> //pop樣式
 <style name="toolBar_pop_item" parent="Base.Theme.AppCompat.Light">
    <item name="android:textColor">@color/colorAccent</item>
 </style>
<!--R.menu.toolbar_menu-->
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_setting"
        android:icon="@android:drawable/ic_menu_search"
        android:orderInCategory="100"
        android:title="測試1"
        app:showAsAction="ifRoom" /> //如果有空間就在toolbar上顯示處理
    <item
        android:id="@+id/action_notify"
        android:icon="@android:drawable/ic_lock_power_off"
        android:orderInCategory="100"
        android:title="測試2"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        android:orderInCategory="100"
        android:title="設(shè)置"
        app:showAsAction="never" /> //以menu菜單的形式展現(xiàn)
    <item
        android:id="@+id/action_search2"
        android:icon="@android:drawable/ic_menu_search"
        android:orderInCategory="100"
        android:title="關(guān)于"
        app:showAsAction="always" /> //表示永遠(yuǎn)顯示在Toolbar中,如果屏幕空間不夠則不顯示
</menu>
            

二、Toolbar的特殊用法

由于有些經(jīng)常性的需求如標(biāo)題在中間,可以在Toolbar中添加控件吐辙,這時(shí)候可以認(rèn)為是一個(gè)Framlayout,在控件中添加屬性layout_gravite 即可蘸劈。左右兩邊如果有特殊需求也能如此處理昏苏。

三、Toolbar與一些控件的配合使用(CoordinatorLayout+appbarLayout+collapsedToolbarLayout +toolbar)

1.appBarLayout使用(AppBarLayout實(shí)現(xiàn)相關(guān)效果必須依賴于CoordinatorLayout(協(xié)調(diào)者布局)使用)
參數(shù)scrollFlags(該屬性是給AppBarLayout的子view使用)
  • scroll: 添加該屬性后威沫,該子view會隨著scrollview滑動(dòng)而滑動(dòng)
  • enterAlways:配合scrollview使用贤惯,下拉時(shí)候,appBarLayout中的子view先回到滑動(dòng)到可視區(qū)棒掠,然后繼續(xù)下方scrollview才開始滾動(dòng)
  • enterAlwyasCollapsed:enterAlaways的補(bǔ)充使用孵构,該方法要配合min_height使用,下拉時(shí)候烟很,appBarLayout中子view先下滑到最小高度颈墅,當(dāng)繼續(xù)下拉,scrollview滑動(dòng)頂點(diǎn)雾袱,再次下拉到子view最大寬度
  • exitUnitlCollapsed:用于上滑該子view滑出屏幕的效果恤筛,也需要配合min_height使用,子view先上滑至最小寬度芹橡,便不再向上滑動(dòng)
  • snap:彈性顯示子view,添加該參數(shù)后會到達(dá)上面參數(shù)的極限情況毒坛,滑動(dòng)超過一定比率就滑動(dòng)上面四個(gè)參數(shù)產(chǎn)生效果的極限情況
  • 注意:
  1. enterAlways,enterAlwaysCollapsed,exitUnitlCollapsed,snap必須在scoll前提下才能使用
  2. enterAlwaysCollapsed必須有enterAlways參數(shù)才能產(chǎn)生效果
  3. enterAlways,包括enterAlwaysCollapsed和exitUnitlCollapsed最好不要同時(shí)使用會出現(xiàn)滑動(dòng)異常
2.AppBarLayout實(shí)現(xiàn)tab吸頂效果用例

注意:

  • 吸頂?shù)目丶灰欢ㄊ褂胻abLayout林说,可以是viewGroup包裹的自定義tab粘驰,也可以是其他控件屡谐,不能添加scroll_flags,如果添加會產(chǎn)生跟隨滑動(dòng)
  • appbarLayout下方的控件必須使用如NestScrollview蝌数,Recyclerview等材料設(shè)計(jì)控件,并且添加app:layout_behavior="@string/appbar_scrolling_view_behavior"參數(shù)
  • 如果在NestScrollview中加入的是viewpager度秘,需要在NestScrollview中添加 android:fillViewport="true" 否則viewpager內(nèi)容是不會顯示的可參考 ScrollView 嵌套 ViewPager 不顯示
<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    
    <android.support.v7.widget.Toolbar
        android:id="@+id/tool_bar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        android:gravity="center_horizontal"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/AlertDialog.AppCompat.Light"
        app:logo="@mipmap/ic_launcher"
        app:navigationIcon="@drawable/arrow_back_black_18x18"
        app:popupTheme="@style/toolBar_pop_item"
        app:subtitle="副標(biāo)題"
        app:subtitleTextColor="#fff"
        app:title="標(biāo)題"
        app:titleTextColor="#fff" />

    <android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".CoordinatorActivity">
        <!--toolbar必須放在AppbarLayout中構(gòu)成響應(yīng)滾動(dòng)事件-->
        <!--appbar必須使協(xié)調(diào)者布局中的直接子view-->
        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
         <!--   需要跟隨滾動(dòng)的控件顶伞,必須加入scroll_flags-->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:background="@color/colorPrimaryDark"
                app:layout_scrollFlags="scroll|snap|enterAlways" />
            <!-- 實(shí)現(xiàn)吸頂?shù)目丶@個(gè)控件可以是tabLayout剑梳,也可以是其他自定義的tab控件 -->
            <TableLayout
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:background="@color/colorAccent">
            </TableLayout>
        </android.support.design.widget.AppBarLayout>
        
        <android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">
            
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">

            </LinearLayout>
        </android.support.v4.widget.NestedScrollView>

    </android.support.design.widget.CoordinatorLayout>
</LinearLayout>
圖片一

3.CollapsingToolbarLayout相關(guān)使用

定義:用于包裝ToolBar,實(shí)現(xiàn)折疊應(yīng)用程序欄唆貌,作為AppBarLayout的直接子view使用

1. 折疊式標(biāo)題,需要在CollapsingToolbarLayout中添加app:layout_scrollFlags="scroll|exitUntilCollapsed"垢乙,scroll是用于跟隨滑動(dòng)锨咙,extitUntilCollapsed用于標(biāo)題欄折疊時(shí)候不至于全部滑動(dòng)上去,此時(shí)collapsingToolBarLayout要設(shè)置固定高度追逮,不能使用 wrap_layout酪刀。

    <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fitsSystemWindows="true">

            <!--scrollFlags必須為exitUntilCollapsed,固定一個(gè)大于Toolbar的高度,否則沒有折疊效果-->
            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/ctl"
                android:layout_width="match_parent"
                android:layout_height="200dp" //固定高度钮孵,使用wrap_layout無法達(dá)到效果
                app:layout_scrollFlags="scroll|exitUntilCollapsed" //這兩個(gè)參數(shù)必須設(shè)置
                app:title="這是標(biāo)題">
                
                <android.support.v7.widget.Toolbar
                    android:id="@+id/tool_bar"
                    android:layout_width="match_parent"
                    android:layout_height="?attr/actionBarSize"
                    android:layout_marginLeft="20dp"
                    android:layout_marginRight="20dp"
                    android:background="@color/colorAccent"
                    android:gravity="center_horizontal"
                    android:minHeight="?attr/actionBarSize"
                    app:logo="@mipmap/ic_launcher"
                    app:navigationIcon="@drawable/arrow_back_black_18x18"
                    app:popupTheme="@style/toolBar_pop_item"
                    app:subtitle="副標(biāo)題"
                    app:subtitleTextColor="#fff"
                    app:title="標(biāo)題"
                    app:titleTextColor="#fff" />


            </android.support.design.widget.CollapsingToolbarLayout>
        </android.support.design.widget.AppBarLayout>

圖片二

出現(xiàn)的問題

  • collapsingToolbarLayout中的標(biāo)題和Toolbar中的標(biāo)題取舍問題骂倘,如果要使用toolbar中的標(biāo)題應(yīng)該設(shè)置就要么不在xml設(shè)置collapsingToolbarLayout的標(biāo)題,要么在代碼中設(shè)置標(biāo)題為空巴席,一旦賦了標(biāo)題历涝,那么就會以collapsingToolbarLayout中標(biāo)題為主
  • Toolbar并沒有固定在標(biāo)題上(紅色背景),而是向上滑動(dòng)到屏幕外了漾唉,如果要固定Toolbar不移動(dòng)荧库,應(yīng)該使用的方法是layout_collapseMOde = "pin"(放在Toolabar的xml中) ,這樣toolbar就固定在標(biāo)題欄位置不會向上滑動(dòng)了赵刑。

2.contentScrim和statusBarScrim(CollapsingToolbarLayout中)

  • contentScrim用于CollapsingToolbarLayout折疊后顯示的顏色(默認(rèn)為colorPrimary)
  • statusBarScrim是折疊后狀態(tài)欄顯示的顏色(默認(rèn)為colorPrimaryDark)分衫,如果要使用該資源值必須在代碼中調(diào)用
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);否則不會出現(xiàn)任何效果
        <!--toolbar必須放在AppbarLayout中構(gòu)成響應(yīng)滾動(dòng)事件-->
        <!--appbar必須使協(xié)調(diào)者布局中的直接子view-->
        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fitsSystemWindows="true">

            <!--scrollFlags必須為exitUntilCollapsed,固定一個(gè)大于Toolbar的高度,否則沒有折疊效果-->
            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/ctl"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                app:layout_scrollFlags="scroll|exitUntilCollapsed"
                app:contentScrim="@android:color/holo_red_dark" //折疊后標(biāo)題欄顯示顏色
                app:statusBarScrim="@color/design_default_color_primary" //折疊后狀態(tài)欄顯示顏色
                app:title="">
              <android.support.v7.widget.Toolbar
                    android:id="@+id/tool_bar"
                    android:layout_width="match_parent"
                    android:layout_height="?attr/actionBarSize"
                    android:layout_marginLeft="20dp"
                    android:layout_marginRight="20dp"
                    android:background="@color/colorAccent"
                    android:gravity="center_horizontal"
                    android:minHeight="?attr/actionBarSize"
                    app:logo="@mipmap/ic_launcher"
                    app:navigationIcon="@drawable/arrow_back_black_18x18"
                    app:popupTheme="@style/toolBar_pop_item"
                    app:subtitle="副標(biāo)題"
                    app:layout_collapseMode="pin"
                    app:subtitleTextColor="#fff"
                    app:title="標(biāo)題"
                    app:titleTextColor="#fff" />


            </android.support.design.widget.CollapsingToolbarLayout>
        </android.support.design.widget.AppBarLayout>
圖片三

3.添加圖片背景料睛,實(shí)現(xiàn)展開圖片丐箩,折疊標(biāo)題欄效果
利用layout_collapseMode = "parallax"添加在圖片或者其他控件中,這樣就完成了可折疊的效果恤煞,由于CollapsingToolabarLayout相當(dāng)于Framelayout所以圖片控件應(yīng)放在Toolbar的上方屎勘,同時(shí)為了防止Toolbar的背景覆蓋圖片,應(yīng)設(shè)置背景為透明居扒。同時(shí)應(yīng)該給折疊后的標(biāo)題設(shè)置contetnScrim否則圖片折疊不會被覆蓋概漱。

        <!--toolbar必須放在AppbarLayout中構(gòu)成響應(yīng)滾動(dòng)事件-->
        <!--appbar必須使協(xié)調(diào)者布局中的直接子view-->
        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fitsSystemWindows="true">

            <!--scrollFlags必須為exitUntilCollapsed,固定一個(gè)大于Toolbar的高度,否則沒有折疊效果-->
            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/ctl"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                app:contentScrim="@color/colorAccent"
                app:layout_scrollFlags="scroll|exitUntilCollapsed">

                <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:scaleType="fitXY"
                    android:src="@drawable/timg"
                    app:layout_collapseMode="parallax" 
                    app:layout_collapseParallaxMultiplier="0.7" />

                <android.support.v7.widget.Toolbar
                    android:id="@+id/tool_bar"
                    android:layout_width="match_parent"
                    android:layout_height="?attr/actionBarSize"
                    android:background="@android:color/transparent"
                    android:gravity="center_horizontal"
                    app:layout_collapseMode="pin"
                    app:navigationIcon="@drawable/arrow_back_black_18x18"
                    app:popupTheme="@style/toolBar_pop_item"
                    app:subtitle="副標(biāo)題"
                    app:subtitleTextColor="@color/white"
                    app:title="標(biāo)題"
                    app:titleTextColor="@color/white" />
                
            </android.support.design.widget.CollapsingToolbarLayout>
        </android.support.design.widget.AppBarLayout>
圖片四

注意

  1. 在xml設(shè)置標(biāo)題顏色會導(dǎo)致無法生效喜喂,必須在代碼中進(jìn)行添加collapsingToolbarLayout.setCollapsedTitleTextColor();collapsingToolbarLayout.setExpandedTitleColor()
  2. layout_collapseMode = 'pin' 用于固定瓤摧,不隨滑動(dòng)竿裂,可以用于Toolar的固定
  3. layout_collapseMode = "parallax" 圖片或者布局的折疊,其中跟隨一個(gè)屬性為layout_collapseParallaxMultiplier = "0-1"照弥,為0時(shí)候腻异,圖片跟隨滑動(dòng),滑出視野这揣,為1.0時(shí)候悔常,圖片固定下面內(nèi)容覆蓋圖片,為0.5给赞,圖片既向上滑動(dòng)机打,下面內(nèi)容向上覆蓋,并且速度一致片迅,就像電視關(guān)機(jī)上下邊緣同時(shí)變黑残邀,并向中間移動(dòng)。公式為 下半部分高度 / 視圖總高度 = (0.0 - 1.0 ) 取值范圍是 0.0 - 1.0

git地址

參考網(wǎng)址:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柑蛇,一起剝皮案震驚了整個(gè)濱河市芥挣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌唯蝶,老刑警劉巖九秀,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粘我,居然都是意外死亡鼓蜒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門征字,熙熙樓的掌柜王于貴愁眉苦臉地迎上來都弹,“玉大人,你說我怎么就攤上這事匙姜〕┫幔” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵氮昧,是天一觀的道長框杜。 經(jīng)常有香客問我,道長袖肥,這世上最難降的妖魔是什么咪辱? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮椎组,結(jié)果婚禮上油狂,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好专筷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布弱贼。 她就那樣靜靜地躺著,像睡著了一般磷蛹。 火紅的嫁衣襯著肌膚如雪吮旅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天弦聂,我揣著相機(jī)與錄音鸟辅,去河邊找鬼。 笑死莺葫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的枪眉。 我是一名探鬼主播捺檬,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贸铜!你這毒婦竟也來了堡纬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤蒿秦,失蹤者是張志新(化名)和其女友劉穎烤镐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棍鳖,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炮叶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了渡处。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镜悉。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖医瘫,靈堂內(nèi)的尸體忽然破棺而出侣肄,到底是詐尸還是另有隱情,我是刑警寧澤醇份,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布稼锅,位于F島的核電站,受9級特大地震影響僚纷,放射性物質(zhì)發(fā)生泄漏矩距。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一畔濒、第九天 我趴在偏房一處隱蔽的房頂上張望剩晴。 院中可真熱鬧,春花似錦、人聲如沸赞弥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绽左。三九已至悼嫉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拼窥,已是汗流浹背戏蔑。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鲁纠,地道東北人总棵。 一個(gè)月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像改含,于是被迫代替她去往敵國和親情龄。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

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